在使用 Hibernate 时,我对一对多/多对一关系的拥有方的正确选择有点困惑。我可以想象这种关系的两个例子:
- Order/OrderLine 对是第一个示例。在这对中,订单具有“主人”角色。一个人想保存订单,结果保存所有的项目。
- 组/用户对是第二个示例。在这一对中,用户具有“主人”角色。人们宁愿通过将用户分配到某个组来保存用户。
如果我们从细节中抽象出来,两个示例的内部结构是相同的,例如
public class Order/Group implements Serializable {
private Integer id;
private Set<OrderLine/User> children = new HashSet<OrderLine/User>();
}
public class OrderLine/User implements Serializable {
private Integer id;
private Order/Group parent;
}
hibernate注解映射将分别为
@OneToMany(mappedBy = "parent")
@ManyToOne
@JoinColumn(name = "id", nullable = false)
逻辑上将 OrderLine/User 保留为拥有方。
上述用例对关系拥有方的选择有影响吗?一个反转拥有方或使用级联选项保存/删除父级就足够了吗?添加/删除一些子项然后使用orphanRemoval
(订单 - 订单行)或不使用它(组 - 用户)将父级持久保存到数据库是否正常?到底是哪一方负责某些操作,比如清除当前所在的群组用户,或者通过添加和删除项目来更改顺序?