我想在 JPA 中映射 map ,但出现异常: 我的 java 代码如下所示:
问题.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>();
EmployeePosition
是一个 Enum
,Employee
是一个 Entity
。
我得到这个异常:
Internal Exception: java.sql.SQLException: ORA-00904: "EMPLOYEES": invalid identifier
Error Code: 904 Call: INSERT INTO ISSUE_EMPLOYEE (ISSUE_ID, EMPLOYEES, EMPLOYEEPOSITION_ID) VALUES (?, ?, ?) bind => [27, [B@18b85d, SERVICE]
它似乎忽略了@JoinColumn
注释并尝试将对象插入数据库中。
我的映射出了什么问题/是否可以匹配这样的实体?
最佳答案
据我了解,当 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>();
编辑:上面的映射在 Hibernate 中工作正常,但在 EclipseLink 中不起作用。 ISSUE_EMPLOYEE
中的 EMPLOYEEPOSITION_ID
列已创建,但未在查询中使用。它不仅发生在枚举键上,也发生在其他原始类型上。
它看起来像是 EclipseLink 中的一个错误。我在 their Bugzilla 中找不到,所以也许举报会更好。
关于JPA:映射 Map<Enum, Entity>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4955545/