如果我也将列也提升为a / PK(又称为识别关系)会怎样?由于该列现在是PK,因此必须使用@Id(…)对其进行标记。
对 派生标识符的 增强支持实际上是JPA2.0中新内容的一部分(请参阅JPA 2.0规范中的 2.4.1与派生身份相对应的主键部分),JPA1.0不允许
Id在
OneToOne或上使用
ManyToOne。在JPA
1.0中,您必须使用外键列
PrimaryKeyJoinColumn并
Basic
Id为其定义一个映射。
现在的问题是:@Id + @JoinColumn与@PrimaryKeyJoinColumn是否相同?
您可以获得类似的结果,但是使用
Idon
OneToOne或
ManyToOne则 简单得多 ,这是使用JPA
2.0映射派生标识符的首选方法。
PrimaryKeyJoinColumn仍可以在 JOINED 继承策略中使用。在JPA
2.0规范的相关部分下面:
11.1.40 PrimaryKeyJoinColumn注释
该
PrimaryKeyJoinColumn批注指定用作外键加入到另一个表的主键列。的
PrimaryKeyJoinColumn注释用于连接在一个实体子类的主表JOINED映射策略到它的父类的主表; 它在SecondaryTable注释中用于将辅助表连接到主表;并且可以OneToOne
在其中将引用实体的主键用作被引用实体的外键的映射中使用[108]。…
如果
PrimaryKeyJoinColumn在JOINED映射策略中未为子类指定注释,则假定外键列的名称与超类主表的主键列的名称相同。…
示例: Customer和ValuedCustomer子类
@Entity@Table(name="CUST")@Inheritance(strategy=JOINED)@DiscriminatorValue("CUST")public class Customer { ... }@Entity@Table(name="VCUST")@DiscriminatorValue("VCUST")@PrimaryKeyJoinColumn(name="CUST_ID")public class ValuedCustomer extends Customer { ... }[108] 对于OneToOne映射情况, 现在将首选2.4.1.1节中描述的派生id机制
PrimaryKeyJoinColumn。
也可以看看
- 通过一对一关系的主键
此源http://weblogs.java.net/blog/felipegaucho/archive/2009/10/24/jpa-join-
table-additional-
state指出使用@ManyToOne和@Id可与JPA 1.x一起使用。现在谁是正确的?
作者使用的是与 JPA 2.0
兼容的预发行版Eclipselink(在撰写本文时为2.0.0-M7版)来撰写有关JPA
1.0(!)的文章。本文具有误导性,作者使用的 不是 JPA 1.0的一部分。
为了记录在案,支持
Id上
OneToOne和
ManyToOne已经在1.1的Eclipselink增加(见此消息来自詹姆斯·萨瑟兰,的Eclipselink
comitter和的主要贡献者的Java
Persistence维基书)。但是让我坚持,这
不是 JPA 1.0的一部分。



