我有以下情况:
我有麻烦弄清楚主人方面是什么,为什么?
你能帮忙吗?
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;
}
}
答案 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
方。