gpt4 book ai didi

NHibernate 防止级联删除

转载 作者:行者123 更新时间:2023-12-03 16:40:23 27 4
gpt4 key购买 nike

假设我有一个 Foo 类。我还有一个名为 Foo_Foo 的关于 Foo 的 View ,它列出了 Foos 之间的多对多关联。我将这个关联映射为每个 Foo 上的一个简单的不可变集,其中 cascade="none":

<set name="association" table="Foo_Foo" cascade="none" mutable="false">
<key column="ParentFoo" />
<many-to-many class="Foo, MyAssembly" column="BaseFoo" />
</set>

但是,当我尝试删除 Foo 时,NHibernate 尝试删除 Foo.association 但正确地失败了。

如何防止 NHibernate 尝试删除与 View 的关联?

最佳答案

集合属于Foo。您无法共享集合,因此无需将其保存在数据库中。 Cascade 用于告诉 NH 是否也应删除引用的 Foo

为什么要将 Foo_Foo 记录保存在数据库中?如果这应该是一个双向的多对多自引用,它就不会像这样工作。


理解问题后编辑。

Cascade 在您的情况下不起作用,因为它只影响引用的 Foos。

为避免插入/更新和删除集合表,您可以尝试以下方法之一:

  • 第一个明显的尝试是 mutable="false",您已经尝试过了。我真的不明白为什么它不起作用。您可以在 Nhibernate 用户组中提问。
  • 不太明显,但很有前途的是 inverse="true"。 Inverse 告诉 NH 集合被映射到其他地方,不需要从这里存储。所以它只是省略了插入,但我不知道删除。
  • 如果这不起作用,您需要探索更复杂的解决方案。您可以将其映射为引用 Foos 的一对多中间实体。中间实体是到 View 的映射。它是不可变的(仍然可能导致删除语句)。在这种情况下,cascade="false" 将起作用(因为它是引用的实体)。它还可以配置插入、更新和删除 sql 语句(它们是空的),但这很可能甚至不是必需的。

关于NHibernate 防止级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12692095/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com