具有共享主键的 Hibernate 拥有实体端

Hibernate owning entity side with shared primary key

我正在阅读以下文章:

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

我对两件事感到困惑:

1- 谁是实体的拥有方。来自文章: "we should tell hibernate that it’s the Student class which will manage the relationship."

但是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是owner端,又因为它的ID也是join列,所以也应该是外键(就像ManyToOne关联的join列也应该是FK) .请注意,此选择意味着地址不能没有学生。