@JoinColumn
和 @PrimaryKeyJoinColumn
之间的确切区别是什么?
您使用 @JoinColumn
作为外键一部分的列。典型的列可能如下所示(例如,在具有附加属性的连接表中):
@ManyToOne
@JoinColumn(name = "...")
private OtherClass oc;
如果我也将列提升为 PK(也称为识别关系),会发生什么情况?由于该列现在是 PK,我必须用 @Id
标记它:
@Id
@ManyToOne
@JoinColumn(name = "...")
private OtherClass oc;
现在的问题是:
@Id
+ @JoinColumn
@PrimaryKeyJoinColumn
吗?
@ManyToOne
@PrimaryKeyJoinColumn(name = "...")
private OtherClass oc;
如果不是,那么 @PrimaryKeyJoinColumn
有什么用?
原文由 Kawu 发布,翻译遵循 CC BY-SA 4.0 许可协议
这种对 派生标识符 的增强支持实际上是 JPA 2.0 中新内容的 一部分(请参阅 JPA 2.0 规范中的 2.4.1 主键对应派生标识 部分),JPA 1.0 不允许
Id
一个OneToOne
或ManyToOne
。使用 JPA 1.0,您必须使用PrimaryKeyJoinColumn
并定义Basic
Id
外键列的映射。您可以获得类似的结果,但在 --- 或
Id
上使用OneToOne
或ManyToOne
更简单,并且是使用 JPA 派生标识符的首选方法。PrimaryKeyJoinColumn
可能仍用于 JOINED 继承策略。在 JPA 2.0 规范的相关部分下方:也可以看看
作者正在使用 EclipseLink 的预发布 JPA 2.0 兼容版本(本文发布时的版本 2.0.0-M7 )来撰写有关 JPA 1.0(!) 的文章。这篇文章具有误导性,作者使用的 不是 JPA 1.0 的一部分。
作为记录,对
Id
的支持OneToOne
和ManyToOne
已添加到 Eclipse 和来自 James 1.1 的主要贡献者链接 SuitterLink 的主要贡献者 消息 中 Java 持久性 wiki 书)。但我要坚持,这 不是 JPA 1.0 的一部分。