具有一对一关系的JPA @JoinColumn注释



是真的,@JoinColumn可以在JPA的一对关系的两边使用吗?在我的印象中,它应该始终用于一对关系的拥有方,因为拥有方将具有外键列,并且该注释定义了外键列的属性。如果我的理解不正确,请澄清。

Edit #1 -我想知道,在哪种情况下,我们将在一对一关系的两侧使用@JoinColumn注释?

OneToOne关系不一定是双向的。当在源对象和目标对象中都存在对关系的另一个对象的引用时,就会发生双向OneToOne关系。

在双向OneToOne关系中,在关系的拥有方使用单个外键。另一方面,目标实体必须使用mappedBy属性。

  • 例子:

让我们考虑PlayerWebsite对象之间的OneToOne关系。

每个播放器实体对应一个网站实体:

@Entity
public class Player {
  @Id
  @Column(name="PLAYER_ID")
  private long id;
  ...
  @OneToOne
  @JoinColumn(name="WEBSITE_ID")
  private Website website;
  ...
}

如果我们将mapappedby选项添加到Website实体中,OneToOne单向关联将被转换为双向关联:

@Entity
public class Website {
  @Id
  @Column(name = "WEBSITE_ID")
  private long id;
  ...
  @OneToOne(mappedBy="website")
  private Player websiteOwner;
  ...
}

您可以参考这个链接和这个链接获取更多信息

最新更新