【问题标题】:Mapping a OneToMany unidirectional relationship映射 OneToMany 单向关系
【发布时间】:2013-11-20 19:31:43
【问题描述】:

以这些表为例,其中每个person 可以有多个addresses。

CREATE TABLE person (
    id INTEGER NOT NULL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);
CREATE TABLE address (
    id INTEGER NOT NULL PRIMARY KEY,
    address VARCHAR(100) NOT NULL,
    city VARCHAR(100) NOT NULL,
    person_id INTEGER NOT NULL
);

我想将这些表映射到 JPA 实体,但我不想使用 mappedBy 映射它们之间的双向关系。

PersonAddress 之间映射OneToMany 单向关系的正确方法是什么?考虑到Person必须知道他们的Addresses,但Address一定不知道它所属的Person

【问题讨论】:

    标签: java jpa


    【解决方案1】:

    您可以在 Person Entity 中使用注释 JoinColumn 和 ManyToOne。

        @OneToMany(cascade = CascadeType.ALL,orphanRemoval = true)
    @JoinColumn(name = "person_pkey")
    public List<Address> getAddresses() {
        return addresses;
    }
    

    【讨论】:

      【解决方案2】:

      您不需要使它成为双向的。您可以简单地将@OneToMany 注释放在Person 中的集合类型字段上,并指定address 表的JoinColumn

      参见here,示例 3。我认为这就是您要寻找的内容。

      所以你会得到类似的东西:

      // In Person class:
      
      @OneToMany
      @JoinColumn(name="person_id")
      public Set<Address> getAddresses() {return addresses;}
      

      没有mappedBy 属性,没有双向映射。

      【讨论】:

        猜你喜欢
        • 2012-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多