这是我的OrderSet.hbm
文件。它有OrderSetMember
s,因为它是孩子(一对多)的关系。
<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-save命令保存父级和子级吗? 或者我是否需要另外一个会话保存以保存孩子?
Session session = sessionFactory.getCurrentSession();
session.saveOrUpdate(orderSet);
这些是我的数据模型:
public class OrderSet {
private List<OrderSetMember> orderSetMembers;
}
public class OrderSetMember {
private OrderSet orderSet;
}
答案 0 :(得分:0)
cascade
和inverse
有两个完全不同的目的。
cascade
告诉应用于父级时应该在子(ren)上自动应用哪个实体生命周期操作。
inverse
表示孩子是该协会的所有者。这进一步意味着如果您不将子项与子项上的父项关联,则关系信息将不会与数据库同步。
例如,如果您向父实体实例中的OrderSetMember
集合添加orderSetMembers
,但在orderSet
中留下null
字段OrderSetMember
实例,然后调用session.saveOrUpdate(orderSet)
,结果将是:
OrderSet
和OrderSetMember
个实例都保存到数据库中(save
级联到子级)。order_set_id
(OrderSetMember
映射到的表中的外键)设置为null
。这是因为OrderSetMember
是关联的所有者,并且当Hibernate在脏检查时检查关联的所有者时,没有关联的OrderSet
实体。OrderSet
个实例时,您会注意到OrderSetMember
集合中不存在orderSetMembers
。