具有共享主键的 Hibernate 拥有实体端
Hibernate owning entity side with shared primary key
我正在阅读以下文章:
我对两件事感到困惑:
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 是主键和外键?在下面的文章中,他们有相同的示例,但它是单向的:
你可以注意到@PrimaryKeyJoinColumn 的位置发生了变化,地址仍然是外键。哪个 ID 将是外键。
在此示例中,Address 确实是关联的拥有方。你是绝对正确的:具有 mappedBy 属性的一侧是反面。
既然Address是owner端,又因为它的ID也是join列,所以也应该是外键(就像ManyToOne关联的join列也应该是FK) .请注意,此选择意味着地址不能没有学生。
我正在阅读以下文章:
我对两件事感到困惑:
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 是主键和外键?在下面的文章中,他们有相同的示例,但它是单向的:
你可以注意到@PrimaryKeyJoinColumn 的位置发生了变化,地址仍然是外键。哪个 ID 将是外键。
在此示例中,Address 确实是关联的拥有方。你是绝对正确的:具有 mappedBy 属性的一侧是反面。
既然Address是owner端,又因为它的ID也是join列,所以也应该是外键(就像ManyToOne关联的join列也应该是FK) .请注意,此选择意味着地址不能没有学生。