gpt4 book ai didi

java - Hibernate拥有共享主键的实体端

转载 作者:行者123 更新时间:2023-11-29 10:38:17 26 4
gpt4 key购买 nike

我正在阅读以下文章:

http://websystique.com/hibernate/hibernate-one-to-one-bidirectional-with-shared-primary-key-annotation-example/

我对两件事感到困惑:

1- 谁是该实体的所有者。来自文章:“我们应该告诉 hibernate,由 Student 类来管理关系。”

然而,学生实体是用mappedBy注释的,我知道任何用mappedBy注释的实体都是反面。谁能解释一下吗?

@Entity
@Table(name = "STUDENT")

public class Student {


@Id
@GeneratedValue
@Column(name = "STUDENT_ID")
private long id;

@Column(name = "FIRST_NAME")
private String firstName;

@Column(name = "LAST_NAME")
private String lastName;

@Column(name = "SECTION")
private String section;

@OneToOne(mappedBy="student", cascade = CascadeType.ALL)
private Address address;

2- 哪个 ID 是外键? @PrimaryKeyJoinColumn 用于 Address 实体,这是否意味着 Address Id 是主键和外键?在下面的文章中,他们有相同的示例,但它是单向的:

http://websystique.com/hibernate/hibernate-one-to-one-unidirectional-with-shared-primary-key-annotation-example/

您可以注意到@PrimaryKeyJoinColumn的位置发生了变化,但该地址仍然是外键。其中 Id 将作为外键。

最佳答案

  1. 在此示例中,Address 确实是关联的拥有方。你是绝对正确的:具有mappedBy属性的一面是反面。

  2. 由于Address是所有者端,并且由于其ID也是连接列,因此它也应该是外键(就像ManyToOne关联的连接列也应该是FK一样)。请注意,此选择意味着没有学生的地址就不能存在。

关于java - Hibernate拥有共享主键的实体端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46015530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com