【问题标题】:JPA: Map a Map<Enum, Entity>JPA:映射地图<枚举,实体>
【发布时间】:2011-02-10 09:54:22
【问题描述】:

我想在 JPA 中映射地图,但出现异常: 我的 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>();

EmployeePositionEnumEmployeeEntity

我得到了这个例外:

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

错误代码:904 调用:INSERT INTO ISSUE_EMPLOYEE (ISSUE_ID, EMPLOYEES, EMPLOYEEPOSITION_ID) VALUES (?, ?, ?) 绑定 => [27, [B@18b85d, 服务]

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

【问题讨论】:

    标签: jpa eclipselink


    【解决方案1】:

    据我了解,当 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 中找不到,所以最好举报。

    【讨论】:

    • 我试过你的注释。我做了这样的 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:我不确定您的 @MapKeyConvert 注释。你试过用@MapKeyEnumerated替换它吗?
    • 是的,我尝试了@MapKeyEnumerated 而不是@MapKeyConvert,但它抛出了相同的异常。
    • 终于在他们的Bugzilla举报了
    • 感谢这对我帮助很大。对于那些使用 Enum 作为键的人,他们甚至可以使用:@MapKeyEnumerated(EnumType.STRING)
    猜你喜欢
    • 2016-12-13
    • 2010-09-29
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2021-09-13
    • 2013-04-14
    • 1970-01-01
    相关资源
    最近更新 更多