这是家庭作业,我不明白,因此感谢您的帮助。该系统是一个奥运奖牌统计模拟器。
我们有一个事件表和一个国家表:
statement.execute("create table EVENTS (EVENTNUMBER integer primary key not null, EVENTNAME varchar(32), " +
" GENDER varchar(5), GOLD integer, SILVER integer, BRONZE integer)");
statement.execute("create table COUNTRIES (COUNTRYID integer primary key not null, NAME varchar(32)," +
"TOTALGOLD integer, TOTALSILVER integer, TOTALBRONZE integer)");
这些与实体有关:
@Entity
@Table(name = "COUNTRIES")
public class Country implements Serializable
{
@Id
private int countryID; // This is the primary key
private String name;
private int totalGold;
private int totalSilver;
private int totalBronze;
//getters, setters omitted
@Entity
@Table(name = "EVENTS")
public class Event implements Serializable
{
@Id
private int eventNumber; // This is the primary key
private String eventName;
private String gender; // Men, Women or Mixed
@ManyToOne(optional=false)
@JoinColumn(name="COUNTRYID", nullable=false, updatable=false)
private Country gold, silver, bronze;
//getter, setter methods omitted
问题是向 Event 添加三个 Country 实例变量来代表金、银和铜牌的获胜者,并包括关系类型。对我来说,多对一是有意义的。但是,当我尝试运行它时,我收到一个关于 join 错误的错误,因为它应该只允许一次写入,其余的为只读。
因此,我将 JoinColumn 更改为 insertable=false 并出现错误:列 'COUNTRYID' 不在 FROM 列表中的任何表中,或者出现在连接规范中,并且超出连接规范的范围,或者出现在 HAVING 子句中并且不在 GROUP BY 列表中。
在我的 QueriesBean 中使用此方法:
public List<Event> getEvents()
{
List<Event> eventList = null;
Query query = em.createQuery("SELECT e FROM Event e");
eventList = (List<Event>) query.getResultList();
return eventList;
}
也许有人可以给我一些指导?