拥有JoinColumns注释的所有者方

时间:2016-07-15 22:19:12

标签: java hibernate jpa entity

我有以下情况:
我有麻烦弄清楚主人方面是什么,为什么? 你能帮忙吗?

public class Basket
{

...

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumns({@JoinColumn(name="BASKET", referencedColumnName="ID")})   
    public Set<Product> getProductList() {
        return this.productList;
    }
}

public class Product
{

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
    @JoinColumns({@JoinColumn(name="BASKET", referencedColumnName="ID")})
    public Basket getBasket() {
        return this.basket;
    }

}

3 个答案:

答案 0 :(得分:0)

篮子是这种关系的“一”方面,有很多产品被认定为篮子。因此,“one”通常是父代码,子记录引用父代码。通常,理解这些的最简单方法是查看连接支持表的数据库外键约束(希望有一个)。

答案 1 :(得分:0)

一个客户有一个篮子,一个篮子有一个所有者,所以:

class Owner关系为@OneToOne

一个篮子有很多产品,所以:

class Basket包含@OneToMany关系中的产品列表。

许多产品都有一个篮子,所以:

class Product@ManyToOne有关系。

答案 2 :(得分:0)

JPA 2.0 specification的摘录可能有助于您了解问题:

  

2.10.2双向ManyToOne / OneToMany关系

     

假设:

    Entity A references a single instance of Entity B.
    Entity B references a collection of Entity A[21].
     

实体A必须是该关系的所有者。

     

以下映射默认值适用:

Entity A is mapped to a table named A.
Entity B is mapped to a table named B.
     

表A包含表B的外键。外键列名称形成为以下内容的串联:关系属性的名称或实体A的字段; “_”;表B中主键列的名称。外键列的类型与   表B的主键。

在第11.1.21节中,陈述如下:

  

如果有多个连接列,则必须使用JoinColumns批注为每个连接列指定JoinColumn批注。必须在每个此类JoinColumn批注中指定name和referencedColumnName元素。

在您的情况下,只有一个连接列。所以你不需要@JoinColumns注释。只需使用@JoinColumn即可。 @JoinColumn注释始终用于关系的拥有方,在这种情况下是@ManyToOne方。