场景如下:
我有三个对象(名称已简化):Parent、parent's child 和 child's child。其中,parent's child 是 parent 的一个集合,child's child 是 child 的一个集合。
映射关系如下(相关部分): parent
父元素的子元素
我想实现的是,当我删除父级时,会发生级联删除一直到子级的子级。但目前发生的情况是这样的。
(这仅用于映射测试目的) 获取父实体(正常工作)
在使用级联和反向操作解决“无法插入空值”错误后,希望这段代码现在可以删除所有内容,但只有父项被删除。我在映射中是否漏掉了什么?欢迎提供任何指向正确方向的提示!
感谢Diego的直截了当的答案和解释。
我选择删除
下面发布的代码是(有效的)结果。
父项
希望这能帮助到有相同问题的人!
我有三个对象(名称已简化):Parent、parent's child 和 child's child。其中,parent's child 是 parent 的一个集合,child's child 是 child 的一个集合。
映射关系如下(相关部分): parent
<set name="parentset"
table="pc-table"
lazy="false"
fetch="subselect"
cascade="all-delete-orphan"
inverse="true">
<key column=FK_ID_PC" on-delete="cascade"/>
<one-to-many class="parentchild,parentchild-ns"/>
</set>
父元素的子元素
<set name="childset"
table="cc-table"
lazy="false"
fetch="subselect"
cascade="all-delete-orphan"
inverse="true">
<key column="FK_ID_CC" on-delete="cascade"/>
<one-to-many class="childschild,childschild-ns"/>
</set>
我想实现的是,当我删除父级时,会发生级联删除一直到子级的子级。但目前发生的情况是这样的。
(这仅用于映射测试目的) 获取父实体(正常工作)
IQuery query = session.CreateQuery("from Parent where ID =" + ID);
IParent doc = query.UniqueResult<Parent>();
现在是删除部分
session.Delete(doc);
transaction.Commit();
在使用级联和反向操作解决“无法插入空值”错误后,希望这段代码现在可以删除所有内容,但只有父项被删除。我在映射中是否漏掉了什么?欢迎提供任何指向正确方向的提示!
感谢Diego的直截了当的答案和解释。
我选择删除
on-delete="cascade"
,因为我喜欢在代码中尽可能地控制而不是在数据库中控制。下面发布的代码是(有效的)结果。
父项
<set name="parentset"
table="pc-table"
cascade="all-delete-orphan"
inverse="true"
batch-size="5">
<key column=FK_ID_PC"/>
<one-to-many class="parentchild,parentchild-ns"/>
</set>
父元素的子元素
<set name="childset"
table="cc-table"
cascade="all-delete-orphan"
batch-size="5"
inverse="true">
<key column="FK_ID_CC">
<one-to-many class="childschild,childschild-ns"/>
</set>
希望这能帮助到有相同问题的人!