栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JPA:@JoinColumn和@PrimaryKeyJoinColumn之间的区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JPA:@JoinColumn和@PrimaryKeyJoinColumn之间的区别?

如果我也将列也提升为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是否相同?

您可以获得类似的结果,但是使用

Id
on
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的一部分。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406110.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号