我有一个单向的多对多关联:ListDefinition类具有IList类型的Columns属性,而列可以是多个ListDefinition-s的一部分。问题是,每当我尝试从一个Columns集合中删除一个列(不删除它或从其他ListDefinitions中删除)时,我就会收到此错误:
已删除的对象将通过级联重新保存(从关联中删除已删除的对象)[Domain.Lists.Definitions.ListColumnDefinition#2]
我的映射是通过Fluent NH生成的:
mapping.HasManyToMany(list => list.Columns)
.AsList(part => part.Column("`index`"))
.Cascade.AllDeleteOrphan()
这是生成的hbm:
&lt; hibernate-mapping xmlns =“urn:nhibernate-mapping-2.2”default-access =“property”auto-import =“true”default-cascade =“all”default-lazy =“false”&gt; <登记/>
&lt; class xmlns =“urn:nhibernate-mapping-2.2”mutable =“true”name =“Domain.Lists.Definitions.ListDefinition,Domain,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”table =“{ {1}}“&GT;
&lt; id access =“nosetter.camelcase-underscore”name =“Id”type =“System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”&gt;
&lt; column name =“Id”/&gt;
&lt; generator class =“identity”/&gt;
&LT; / ID&GT;
&lt; list cascade =“all-delete-orphan”name =“Columns”table =“ListColumnDefinitionToListDefinition”mutable =“true”&gt;
&LT;密钥GT;
&lt; column name =“ListDefinition_id”/&gt;
&LT; /密钥GT;
&LT;索引&gt;
&lt; column name =“ListDefinition
”/&gt;
&LT; /索引&gt;
&lt; many-to-many class =“Domain.Lists.Definitions.ListColumnDefinition,Domain,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”&gt;
&lt; column name =“ListColumnDefinition_id”/&gt;
&LT; /多到许多&GT;
&LT; /列表&gt;
&LT; /类&GT; &LT; /休眠映射&GT;
答案 0 :(得分:1)
您确定“all-delete-orphan”是您想要的吗?
从第21.3节。级联生命周期的上述环节:
在我们的案例中,儿童不可能存在 没有父母。所以,如果我们删除一个 来自收藏的孩子,我们确实想要 它被删除。为此,我们必须这样做 使用cascade =“all-delete-orphan”。