2011-02-10 31 views
2

我要地圖在JPA的地圖,但我得到一個例外: 我的Java代碼看起來像這樣:JPA:地圖一個地圖<枚舉,實體>

Issue.java:

@ElementCollection 
@CollectionTable(
    name="ISSUE_EMPLOYEE", 
    [email protected](name="ISSUE_ID", referencedColumnName="ID") 
) 
@MapKeyColumn(name="EMPLOYEEPOSITION_ID") 
@MapKeyConvert("myEnumConverter") 
@JoinColumn(name="EMPLOYEE_ID") 
private Map<EmployeePosition, Employee> namedEmployees = new Hashtable<EmployeePosition, Employee>(); 

EmployeePositionEnumEmployeeEntity

我得到這個異常:

內部異常:值java.sql.SQLException:ORA-00904: 「僱員」:無效的標識符

錯誤代碼:904 電話:INSERT INTO ISSUE_EMPLOYEE(ISSUE_ID ,僱員,EMPLOYEEPOSITION_ID)VALUES(?,?,?) 綁定=> [27,[B @ 18b85d,SERVICE]

它似乎忽略@JoinColumn註解和試圖插件在數據庫中刪除對象。 我的映射有什麼問題/是否有可能匹配這樣的實體?

回答

4

據我所知,當Map的值是一個實體時,您需要@OneToMany而不是@ElementCollection。事情是這樣的:

@OneToMany 
@JoinTable(name = "ISSUE_EMPLOYEE", 
    joinColumn = @JoinColumn(name = "ISSUE_ID"), 
    inverseJoinColumn = @JoinColumn("EMPLOYEE_ID")) 
@MapKeyColumn(name="EMPLOYEEPOSITION_ID") 
private Map<EmployeePosition, Employee> namedEmployees = new Hashtable<EmployeePosition, Employee>(); 

編輯:以上映射工作正常休眠模式,但在的EclipseLink不起作用。 EMPLOYEEPOSITION_IDISSUE_EMPLOYEE已創建,但未在查詢中使用。它不僅發生在枚舉鍵上,而且還發生在其他基本類型上。

它看起來像EclipseLink中的錯誤。我找不到their Bugzilla,所以也許最好報告一下。

+0

我試過了你的註釋。我做了joinTable-Annotation,像這樣:'@JoinTable(name =「ISSUE_EMPLOYEE」,joinColumns = @ JoinColumn(name =「ISSUE_ID」,referencedColumnName =「ID」), inverseJoinColumns = @ JoinColumn(name =「EMPLOYEE_ID」) ) ' 它現在執行此插入語句: 「調用:INSERT INTO ISSUE_EMPLOYEE(EMPLOYEE_ID,ISSUE_ID)VALUES(?,?)」 因此它不會插入EmployeePosition ...任何想法? – Lodger 2011-02-10 11:43:43