【发布时间】:2023-04-03 14:59:01
【问题描述】:
我有一个简单的类,称之为“父”,它包含子对象列表,称之为“子”。
它们之间有一个简单的休眠映射:
儿童地图
// Child mapping
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="X" namespace="X">
<class name="Child" table="Childs">
<id name="Id">
<generator class="guid" />
</id>
<property name="Value"/>
</class>
</hibernate-mapping>
父级映射
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="X" namespace="X">
<class name="Parent" table="Parents">
<id name="Id">
<generator class="guid" />
</id>
<list name="Childs" lazy="false" cascade="all-delete-orphan">
<key column="ParentId" />
<index column="ChildIndex" />
<one-to-many class="Child"/>
</list>
</class>
</hibernate-mapping>
所以在我的代码中
IList<Child> NewChildObjectsList =....
Parent.Childs.Clear();
Parent.ChildObjectList = NewChildObjectsList;
Update(Parent);
问题是,当更新父对象时,父对象获取新的子对象,但存在“孤儿对象”,其父 ID 不存在于 Childs 表中[那些是旧的子对象列表元素]
事实上,如果我在清除列表之后并在分配新子列表之后进行更新,则不存在孤立子对象...
IList<Child> NewChildObjectsList =....
Parent.Childs.Clear();
Update(Parent); // ClearList then update
Parent.Childs = NewChildObjectsList;
Update(Parent); // Add new list then update
是什么原因造成的?以及如何解决?有什么想法吗?
【问题讨论】:
-
为什么要设置
Parent.Childs = NewChildObjectsList?还不够清楚吗? -
嗯,这就是我的“商业案例”...有时我必须将全新的子列表添加到现有的父对象中。
标签: hibernate nhibernate orm nhibernate-mapping