JPA:映射地图<enum,entity =“”> </enum,>

时间:2011-02-10 09:54:22

标签: jpa eclipselink

我想在JPA中映射地图,但我得到一个例外: 我的java代码看起来像这样:

Issue.java:

@ElementCollection
@CollectionTable(
    name="ISSUE_EMPLOYEE",
    joinColumns=@JoinColumn(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:“EMPLOYEES”:标识符无效

     

错误代码:904   致电:INSERT INTO ISSUE_EMPLOYEE(ISSUE_ID,EMPLOYEES,EMPLOYEEPOSITION_ID)价值观(?,?,?)       bind =&gt; [27,[B @ 18b85d,SERVICE]

似乎忽略@JoinColumn注释并尝试在DB中插入对象。 我的映射有什么问题/可以匹配像这样的实体吗?

1 个答案:

答案 0 :(得分:4)

据我了解,当@OneToMany的值为实体时,您需要@ElementCollection而不是Map。像这样:

@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>(); 

编辑:上面的映射在Hibernate中运行良好,但在EclipseLink中不起作用。 EMPLOYEEPOSITION_ID中的ISSUE_EMPLOYEE列已创建,但未在查询中使用。它不仅发生在枚举键上,还发生在其他原始类型中。

它看起来像是EclipseLink中的一个错误。我无法在their Bugzilla中找到,所以也许报告它会更好。