级联="all-delete-orphan"逆="true"一起工作吗?



这是我的OrderSet.hbm文件。它具有OrderSetMembers作为它的子(一对多)关系。

<list name="orderSetMembers" lazy="true" cascade="all-delete-orphan" inverse="true">
    <key column="order_set_id" not-null="true"/>
    <list-index column="sequence_number"/>
    <one-to-many class="OrderSetMember" />
</list>

这是我的OrderSetMember.hbm文件。OrderSetMember与其父代具有多对一关系。我想要一个双向映射。

<many-to-one name="orderSet" class="OrderSet">
    <column name="order_set_id"/>
</many-to-one>

可以用一个会话保存命令同时保存父级和子级吗?或者我需要保存另一个会话来保存孩子吗?

Session session = sessionFactory.getCurrentSession();
session.saveOrUpdate(orderSet);

这些是我的数据模型:

public class OrderSet {
    private List<OrderSetMember> orderSetMembers;
}

public class OrderSetMember {
    private OrderSet orderSet;
}

cascadeinverse有两个完全不同的用途。

cascade告诉哪个实体生命周期操作在应用于父实体时应自动应用于子实体。

inverse表示child是关联的所有者。这进一步意味着,如果不将子级与子级的父级相关联,则关系信息将不会与数据库同步。

例如,如果将OrderSetMember添加到父实体实例中的orderSetMembers集合,但在OrderSetMember实例中保留orderSet字段null,然后调用session.saveOrUpdate(orderSet),结果将是:

  1. OrderSetOrderSetMember实例都保存到数据库中(save级联到子级)
  2. order_set_idOrderSetMember映射到的表中的外键)被设置为null。这是因为OrderSetMember是关联的所有者,当Hibernate在脏检查时检查关联的所有者时,没有关联的OrderSet实体
  3. 当您在新会话中读取上述OrderSet实例时,您会注意到orderSetMembers集合中也不存在OrderSetMember

最新更新