この NHibernate エラー (タイトル内) へのほとんどすべての参照は、子オブジェクトがまだ親コレクションに含まれている間に削除され、後でそれらを再保存するだけで、「削除」を否定することについて語っています (これはエラーの状態と提案です)オブジェクトを再保存している関連付けからオブジェクトを削除します)。
しかし、私の場合、親レコードの削除中にエラーが発生します(その後、関連付けを介して「子」が削除されるため、エラーが示唆するように、関連付けを削除したくありません)
それが毎回発生した場合は理にかなっていますが、私はこのエラーを断続的に観察するだけで、まったく同じコードを実行しますが、特定のレコードに対してのみ実行します. 他の同一のレコードは条件をトリガーせず、削除が実行されます (常に 1 つCustomer
を 2 つのaddress
-es で処理します)。
表示するコードと量がわからない。これは私の「親」オブジェクト マッピングです。
CustomerAddress の「複合要素」の「セット」としてマッピングされた OneCustomer-to-ManyAddresses 関係があります。
<class name="Customer" table="Customer">
<id name="Id" column="[Id]" type="Guid">
<generator class="guid" />
</id>
...
<set name="AddressList" lazy="true" table="CustomerAddress" cascade="all-delete-orphan" >
<key column="[CustomerId]"/>
<composite-element class="CustomerAddress">
<parent name="Customer"/>
<many-to-one name="Address"
class="Address"
column="[AddressId]"
not-null="true"
cascade="all"/>
...
</composite-element>
</set>
そして、これは「複合」オブジェクトのマッピングですCustomerAddress
:
<class name="CustomerAddress" table="CustomerAddress" >
<id name="Id" column="[Id]" type="Guid">
<generator class="guid" />
</id>
<many-to-one
name="Address"
column="[AddressId]"
class="Address"
not-null="true"
cascade="all"/>
<many-to-one
name="Customer"
column="[CustomerId]"
class="Customer"
not-null="true"
cascade="all"/>
...
</class>
エラーとその断続的な性質の説明は何ですか?
追加情報
さらに調べた後、同じ「アドレス」の子への参照を保持している可能性のある別のコレクションを探したところ、次のマッピングが見つかりました。
<class name="Address" table="Address">
<id name="Id" column="[id]" type="Guid" >
<generator class="guid" />
</id>
<!-- REMOVING THE FOLLOWING <BAG> SEEMS TO BE FIXING MY ISSUE -->
<bag name="CustomerAddressList" inverse="true" cascade="none" lazy="false" >
<key>
<column name="[AddressId]" />
</key>
<one-to-many class="CustomerAddress" />
</bag>
</class>
を削除する<bag name="CustomerAddressList"...
と、問題が解決するようです。説明?