Nhibernate:删除孤儿,但删除父节点时不删除子节点

本文关键字:删除 父节点 子节点 Nhibernate | 更新日期: 2023-09-27 18:18:35

我正在寻找一种方法来配置nhibernate,以便孤儿实体被自动删除,但是如果删除了父节点并且存在子节点,则执行父节点上的删除查询,但不执行子节点。基本上,我想把我的级联选项设置为"save-update-orphan",但这是不支持的。

    <set name="children" inverse="true" cascade="all-delete-orphan" access="field">
        <key column="ParentId" />
        <one-to-many class="Parent" />
    </set>

all-delete-orphan对我不起作用,因为它会在删除父节点时自动删除子节点。

我想说得更清楚一点……当我显式地从父集合中删除子集合时,我希望删除子集合。当我显式删除父元素时,我不希望删除子元素。

Nhibernate:删除孤儿,但删除父节点时不删除子节点

我不相信你可以通过配置做你想做的。

我能想到的唯一选择是关闭孤儿删除,当你想要删除时手动删除孩子。

NHibernate级联:all, all-delete-orphans和save-update之间的区别

以下是每个级联选项的含义:

  • none -不做任何级联,让用户自己处理。
  • save-update -当对象被保存/更新时,检查关联并保存/更新任何需要它的对象(包括保存/更新多对多场景下的关联)。
  • delete -删除对象时,删除该关联的所有对象。
  • delete-orphan -删除对象时,删除该关联的所有对象。除此之外,当一个对象被移除从关联而不与另一个对象关联(孤儿),也删除它。
  • all -当一个对象被保存/更新/删除时,检查关联并保存/更新/删除所有找到的对象。
  • all-delete-orphan -当一个对象是保存/更新/删除时,检查关联并保存/更新/删除所有找到的对象。在此外,当从关联中删除对象时与其他对象(孤儿)不关联的,也删除它。

如果您想要删除子对象,则应该删除该子对象。也就是说,如果你不想删除父元素,就不要尝试通过父元素删除子元素。