我想在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>();
EmployeePosition
是Enum
,Employee
是Entity
。
我得到了这个例外:
内部异常:java.sql.SQLException:ORA-00904:“EMPLOYEES”:标识符无效
错误代码:904 致电:INSERT INTO ISSUE_EMPLOYEE(ISSUE_ID,EMPLOYEES,EMPLOYEEPOSITION_ID)价值观(?,?,?) bind =&gt; [27,[B @ 18b85d,SERVICE]
似乎忽略@JoinColumn
注释并尝试在DB中插入对象。
我的映射有什么问题/可以匹配像这样的实体吗?
答案 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中找到,所以也许报告它会更好。