@JoinColumn
和之间的确切区别是@PrimaryKeyJoinColumn
什么?
您@JoinColumn
用于作为外键一部分的列。典型的列可能看起来像(例如在具有附加属性的连接表中):
@ManyToOne
@JoinColumn(name = "...")
private OtherClass oc;
如果我也将该列提升为 a/PK(又名识别关系),会发生什么情况?由于该列现在是 PK,我必须将其标记为@Id
:
@Id
@ManyToOne
@JoinColumn(name = "...")
private OtherClass oc;
现在的问题是:
是@Id
+@JoinColumn
上面一样@PrimaryKeyJoinColumn
?
@ManyToOne
@PrimaryKeyJoinColumn(name = "...")
private OtherClass oc;
如果不是,那@PrimaryKeyJoinColumn
有什么用?
这种对派生标识符的增强支持实际上是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 2.0映射的首选方式。PrimaryKeyJoinColumn
可能仍会在JOINED继承策略中使用。在 JPA 2.0 规范的相关部分下方:也可以看看
作者正在使用EclipseLink的预发布JPA 2.0兼容版本(本文时为2.0.0-M7版)来写一篇关于 JPA 1.0(!)的文章。这篇文章具有误导性,作者使用的东西不是JPA 1.0 的一部分。
作为记录,在 EclipseLink 1.1 中添加了对
Id
onOneToOne
和 的支持ManyToOne
(请参阅来自James Sutherland 的消息,EclipseLink 提交者和Java Persistence wiki 书籍的主要贡献者)。但让我坚持,这不是JPA 1.0 的一部分。