映射一对多,其中map键是int

时间:2012-03-30 10:18:15

标签: mapping persistence openjpa

我正在尝试理解MapKey和MapKeyColumn的注释,我发现它们令人困惑。我正在阅读an article让我更加困惑(规范部分)

我有一个带有int字段的实体,它不是主键:

public class Connections{
...
public final int getConnectionId() { 
    return this.connectionId;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "FK_StartpointTNA")
public final Endpoint getStartpoint() {
    return this.startpoint;
}
...
}

而在另一方面我有

public class Endpoint{
...
 @OneToMany(mappedBy = "startpoint", fetch = FetchType.LAZY, cascade = { javax.persistence.CascadeType.REMOVE })
@MapKeyColumn(name = "connectionId")
public Map<Integer, Connections> getConnections() {
    return this.connections;
}
 ....
 }

我真的不知道如何解决这个问题。我一直得到:org.apache.openjpa.persistence.ArgumentException:&#34; connections&#34;声明它由&#34; startpoint&#34;映射,但这不是相关类型的字段。

映射此图的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

当有人发布到您打开的JIRA时,请删除您方法中的final

来自JPA 2规范:

  

(第2.1节“实体类”,第21页)声明:“实体类不能是最终的。实体类的方法或持久化实例变量可能不是最终的。”

答案 1 :(得分:0)

我遇到了同样的问题并得到了相同的错误消息 但就我而言,我错了 mappedBy = "foo" 其中foo必须声明该字段!不是专栏。