Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA:映射一个映射<;枚举,实体>;_Jpa_Eclipselink - Fatal编程技术网

JPA:映射一个映射<;枚举,实体>;

JPA:映射一个映射<;枚举,实体>;,jpa,eclipselink,Jpa,Eclipselink,我想在JPA中映射映射,但我得到一个例外: 我的java代码如下所示: Issue.java: @ElementCollection @CollectionTable( name="ISSUE_EMPLOYEE", joinColumns=@JoinColumn(name="ISSUE_ID", referencedColumnName="ID") ) @MapKeyColumn(name="EMPLOYEEPOSITION_ID") @MapKeyConvert("myEnum

我想在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>();
@ElementCollection
@收集表(
name=“发布员工”,
joinColumns=@JoinColumn(name=“ISSUE\u ID”,referencedColumnName=“ID”)
)
@MapKeyColumn(name=“EMPLOYEEPOSITION\u ID”)
@MapKeyConvert(“myEnumConverter”)
@JoinColumn(name=“EMPLOYEE\u ID”)
私有映射名称deEmployees=新哈希表();
EmployeePosition
是一个
Enum
Employee
是一个
实体

我得到一个例外:

内部异常:java.sql.SQLException:ORA-00904:“员工”:标识符无效

错误代码:904 调用:在ISSUE_EMPLOYEE(ISSUE_ID,EMPLOYEEPOSITION_ID)值(?,?)中插入 绑定=>[27[B@18b85d,服务]

它似乎忽略了
@JoinColumn
注释,并尝试在数据库中插入对象。
我的映射有什么问题/有可能匹配这样的实体吗?

据我所知,当
映射的值是一个实体时,您需要
@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>(); 
@OneToMany
@JoinTable(name=“ISSUE\u EMPLOYEE”,
joinColumn=@joinColumn(name=“ISSUE\u ID”),
inverseJoinColumn=@JoinColumn(“员工ID”))
@MapKeyColumn(name=“EMPLOYEEPOSITION\u ID”)
私有映射名称deEmployees=新哈希表();
EDIT:上面的映射在Hibernate中工作正常,但在EclipseLink中不起作用。
ISSUE\u EMPLOYEE
中的
EMPLOYEEPOSITION\u ID
列已创建,但未用于查询。它不仅适用于枚举键,也适用于其他基本类型


它看起来像EclipseLink中的一个bug。我在中找不到,所以最好报告它。

我尝试了你的注释。我做了如下的joinTable注释:'@joinTable(name=“ISSUE\u EMPLOYEE”,JointColumns=@JointColumn(name=“ISSUE\u ID”,referencedColumnName=“ID”),InverseJointColumns=@JointColumn(name=“EMPLOYEE\u ID”))'它现在执行此insert语句:“调用:插入到问题员工(员工ID,问题ID)值(?,)”所以它没有插入雇员职位…有什么想法吗?@Lodger:我不确定你的
@MapKeyConvert
注释。你是否尝试过用
@MapKeyEnumerated
替换它?是的,我尝试了@MapKeyEnumerated而不是@MapKeyConvert,但它引发了同样的异常。最后在他们的感谢中报告了这对我帮助很大。对于使用枚举作为键的用户,他们甚至可以使用:@MapKeyEnumerated(EnumType.STRING)