NHibernate防止级联删除



假设我有一个类Foo。我还有一个名为Foo_Foo的Foo视图,它列出了Foo之间的多对多关联。我将这个关联映射为每个Foo上的一个简单的不可变集,级联="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尝试删除与视图的关联?

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

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


理解问题后进行编辑。

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

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

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

相关内容

  • 没有找到相关文章

最新更新