【问题标题】:JPA @JoinColumn annotation with One To One relationship具有一对一关系的 JPA @JoinColumn 注释
【发布时间】:2016-06-27 12:36:21
【问题描述】:

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

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

【问题讨论】:

    标签: java jpa-2.0


    【解决方案1】:

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

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

    • 示例:

    让我们考虑 PlayerWebsite 对象之间的 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;
      ...
    }
    

    您可以咨询此link 和此one 了解更多信息。

    【讨论】:

    • 谢谢。所以我的问题是 - 在哪种情况下,我们将在一对一关系的两侧使用 @JoinColumn 注释?
    • @JoinColumn 注释仅用于关系的拥有方:无论关系是双向的还是单向的,它都不会改变表的关联方式...当您决定使用OneToOne 关系是双向的,您允许双向导航...您可以参考讨论您的问题的this answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多