2

在使用 Hibernate 时,我对一对多/多对一关系的拥有方的正确选择有点困惑。我可以想象这种关系的两个例子:

  1. Order/OrderLine 对是第一个示例。在这对中,订单具有“主人”角色。一个人想保存订单,结果保存所有的项目。
  2. 组/用户对是第二个示例。在这一对中,用户具有“主人”角色。人们宁愿通过将用户分配到某个组来保存用户。

如果我们从细节中抽象出来,两个示例的内部结构是相同的,例如

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(订单 - 订单行)或不使用它(组 - 用户)将父级持久保存到数据库是否正常?到底是哪一方负责某些操作,比如清除当前所在的群组用户,或者通过添加和删除项目来更改顺序?

4

1 回答 1

2

其实,你没有太多选择。在双向 OneToMany 关联中,所有者方始终是多方(Hibernate 有一些技巧可以使逆向成为可能,但这很可怕,并且 JPA、AFAIK 不支持)。

但是不要把太多的价值归于这种所有权。唯一的意思是 Hibernate 将只考虑parentOrderLine(或 User)中的字段来确定是否存在关联。就这样。您仍然可以随意组织您的代码,前提是如果您想将 OrderLine 添加到 Order 中,请记住初始化父字段,如果您想将其与 Order 分离,请记住将其设置为 null。

于 2012-12-14T17:00:21.663 回答