【问题标题】:mapping a one-to-many where the map key is an int映射映射键为 int 的一对多
【发布时间】:2012-03-30 10:18:14
【问题描述】:

我正在尝试理解 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:“connections”声明它是由“startpoint”映射的,但这不是相关类型的字段。

映射这个的正确方法是什么?

【问题讨论】:

    标签: mapping persistence openjpa


    【解决方案1】:

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

    来自 JPA 2 规范:

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

    【讨论】:

    • 好吧。正如我打开的jira所说。我已经知道了,;)。该死的迁移......很好奇它在休眠状态下工作正常
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多