2017-09-02 94 views
0

我读了下面的文章:休眠拥有与实体侧共享主键

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是外键? Address实体中使用了@PrimaryKeyJoinColumn,这是否意味着地址Id是主键和外键?下面的文章中,他们有相同的例子,但它的单向:

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

你可以看到@PrimaryKeyJoinColumn的位置改变,仍然地址为外键。哪个Id将是外键。

回答

1
  1. 在这个例子中,地址确实是关联的拥有方。你是绝对正确的:具有映射可靠性的一面是反面。

  2. 由于地址是业主方,并因为它的ID也是连接列,这也应该是一个外键(就像一个多对一关联的连接列也应该是一个FK)。请注意,这种选择意味着如果没有学生,地址就不能存在。

+0

我只需要一个更多信息以确认这篇文章中关于2: http://fruzenshtein.com/one-to-one-unidirectional-primary-key/ 他们说的外键是Biography类中的author_id。那是对的吗?它应该是Author类中的id。你能确认吗? –