JPA @JoinColumn注释与一对一关系

10

在JPA中,@JoinColumn是否可以在一对一关系的两侧使用?我曾经认为它应该始终用于一对一关系的拥有方,因为拥有方将拥有外键列,而此注释定义外键列的属性。如果我的理解不正确,请明确说明。

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

1个回答

10
OneToOne关系不一定是双向的。当关系的源对象和目标对象都存在对于另一个对象的引用时,就会出现双向的OneToOne关系。
在双向的OneToOne关系中,单个外键用于关系的拥有方。而目标实体必须使用"mappedBy"属性。
举个例子:假设有一个Player对象和一个Website对象之间的OneToOne关系。每个player实体对应于一个website实体。
@Entity
public class Player {
  @Id
  @Column(name="PLAYER_ID")
  private long id;
  ...
  @OneToOne
  @JoinColumn(name="WEBSITE_ID")
  private Website website;
  ...
}

如果我们给网站实体添加mappedBy选项,那么OneToOne单向关联将转变为双向关联:
@Entity
public class Website {
  @Id
  @Column(name = "WEBSITE_ID")
  private long id;
  ...
  @OneToOne(mappedBy="website")
  private Player websiteOwner;
  ...
}

您可以查看这个链接和这个链接了解更多信息。这些链接与Java持久化技术中的@OneToOne注释有关。

谢谢。我的问题是,在哪种情况下我们会在一对一关系的两侧使用@JoinColumn注释? - RaJ
2
@JoinColumn注释仅用于关系的拥有方:无论关系是双向还是单向,它都不会改变表之间的关联方式...当您决定将OneToOne关系用作双向时,可以在两个方向上进行导航...您可以参考此答案(https://dev59.com/2mox5IYBdhLWcg3wHAwA#9421078),该答案讨论了您的问题。 - Strider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接