@JoinColumn是否可以在JPA中的One to One关系中使用?我的印象是它应该总是在拥有一对一关系的一方使用,因为拥有方将有外键列,这个注释定义了外键列的属性。请澄清我的理解是否正确。
编辑#1 - 我想知道,在哪种情况下,我们将在一对一关系的两边使用@JoinColumn注释?
答案 0 :(得分:5)
OneToOne关系不一定是双向的。 当源和目标对象中的关系的另一个对象存在引用时,会发生双向OneToOne关系。
在双向OneToOne关系中,在关系的拥有方使用单个外键。另一方面,目标实体必须使用 mappedBy 属性。
让我们考虑播放器和网站对象之间的OneToOne关系。
每个玩家实体恰好对应一个网站实体:
@Entity
public class Player {
@Id
@Column(name="PLAYER_ID")
private long id;
...
@OneToOne
@JoinColumn(name="WEBSITE_ID")
private Website website;
...
}
如果我们将mappedBy选项添加到Website实体,OneToOne单向关联将转换为双向关联:
@Entity
public class Website {
@Id
@Column(name = "WEBSITE_ID")
private long id;
...
@OneToOne(mappedBy="website")
private Player websiteOwner;
...
}