這是作業,我不明白如此幫助表示讚賞。該系統是奧運獎牌理貨模擬器。映射多對一的外鍵Java EE
我們有一個活動表和國家表:
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
的問題說,三個國家的實例變量添加到事件代表金,銀和青銅贏家,幷包括關係類型。對我來說,這是一個多對一的理解。但是,當我嘗試運行這個時,我得到一個關於連接錯誤的錯誤,因爲它應該只允許一個寫,其餘的只讀。
因此,我將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;
}
也許有人可以給我一些指導?
嘿,謝謝你的迴應! – testpattern
呵呵,編輯速度太慢了......我以爲JoinColumn是聲明外鍵來自哪一列,這是COUNTRYID。現在我可以看到它們應該與EVENT表格的GOLD,SILVER和BRONZE相匹配(我認爲)。另外,謝謝你指出了單獨的行,我不知道這是否有所作爲! – testpattern
我的代表太低,無法給你一票,但我會嘗試當它上升 – testpattern