我有以下场景:
我很难弄清楚所有者是什么,为什么?你能帮帮忙吗?
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;
}
}发布于 2016-07-16 06:33:25
篮子是关系中的“一个”方面,有许多产品被识别为篮子。因此,“1”通常是父代码,子记录引用父记录。通常,理解这些的最简单方法是查看连接后备表的数据库外键约束(希望有一个)。
发布于 2016-07-16 06:38:59
一个客户端有一个篮子,一个篮子有一个所有者,所以:
class Owner在关系@OneToOne中有篮子。
一个篮子有很多产品,所以:
class Basket在relation @OneToMany中有产品列表。
许多产品都有一个篮子,所以:
class Product在@ManyToOne中有关系。
发布于 2016-07-16 17:17:07
JPA 2.0 specification中的摘录可能会帮助您理解这个问题:
2.10.2双向ManyToOne / OneToMany关系
假设:
实体A引用实体B的单个实例。实体B引用实体A21的集合。
实体A必须是关系的所有者。
以下映射默认值适用:
实体A映射到名为A的表。实体B映射到名为B的表。
表A包含表B的外键。外键列名称由以下各项组成:实体A的关系属性或字段的名称;"_";表B中的主键列的名称。外键列与表B的主键具有相同的类型。
在第11.1.21节中,陈述如下:
如果有多个联接列,则必须使用JoinColumns批注为每个联接列指定JoinColumn批注。必须在每个这样的JoinColumn注释中指定name和referencedColumnName元素。
在本例中,只有一个join列。因此,您不需要使用@JoinColumns注释。只需使用@JoinColumn即可。@JoinColumn注释总是在关系的拥有端使用,也就是本例中的@ManyToOne端。
https://stackoverflow.com/questions/38405744
复制相似问题