Hibernate拥有共享主键的实体端

时间:2017-09-02 15:49:11

标签: java mysql hibernate hibernate-mapping

我正在阅读以下文章:

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 个答案:

答案 0 :(得分:1)

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

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