2014-01-13 111 views
0

我想用foriegn鍵將一個表中的實體鏈接到另外兩個表中。我的表是:EJB多個FK不能正常工作

用戶 - > ID(PK),用戶名,密碼,性別(FK),年齡(FK)

性別 - > ID(PK),性別

agegroup - > ID (PK),組

所有ID是INT(11)和所有其他列是VARCHAR

用戶具有列性別年齡&保持該整數是各表的主鍵。所有的表都是InnoDB &我已經通過phpmyadmin使用關係視圖(在這裏發現)鏈接起來。通過Eclipse中的JPA視圖查看數據庫,它們使用FK進行了正確的註釋。

我從菜單中生成實體並進行設置,以便我的用戶實體具有爲兩個字段設置的ManyToOne關係,這些都是我想要的。我有一個從我的servlet創建的Users bean類,它將一個用戶作爲參數添加到請求中,並在一個jsp文件中進行訪問,以將值寫入頁面。我想打印用戶名稱他們的年齡組和他們的性別到一個頁面。

${user.getUsername()} 
${user.getGenderBean().getGender()} 
${user.getAgegroup().getGroup()} 

當我在JPA中設置了全部三個時,我只獲得打印在頁面上的用戶名。奇怪的是,如果我重新做實體,並且不設置年齡組,性別確實會打印出來。相反,這是不正確的。上面的順序是他們如何使用。 GenderBean在我意外創建雙向關係時生成了一次,但即使生成我想要的方式(即單向),該名稱仍然存在。

我使用Eclipse開普勒,Glassfish的4,MySQL的31年5月5日&的EclipseLink

我得到一個SQL語法錯誤如下:

SELECT ID, RANGE FROM agegroup WHERE (ID = ?) 

我改變groupt到的範圍,以防萬一關鍵字混亂正在發生。事實上ID和RANGE是大寫字母,因爲它們不是這樣命名的。我創建了所有列名小寫。

任何人都可以告訴我我在做什麼錯在這裏?

+0

如果遇到問題,我假設你有其他的字段在User和Gender中不匹配,所以它不應該影響AgeGroup。 Group和Range都是MySQL中的關鍵詞,因此您可以嘗試其他方法,並查看日誌中是否存在異常 - 轉換EclipseLink日誌記錄並監視異常情況。如果這沒有幫助,則需要更多信息來幫助您確定正在進行的操作,例如實體的代碼和日誌中的錯誤。 – Chris

回答

0

謝謝克里斯是使用組/範圍導致我的問題。