エンティティ クラスの 1 つに対する次の簡略化されたマッピングがあります。
<class name="Parent" table="tParent">
<id name="Id">
<column name="ParentId" sql-type="bigint"/>
<generator class="native"/>
</id>
<join table="tOneToOneComponent" optional="true" inverse="true">
<key column="ParentId" on-delete="cascade"/>
<property name="Someprop"/>
</join>
</class>
基本的には、関係の反対側からの外部キーと 1 対 1 です (そのため、「逆」を設定します)。また、Parent は tOneToOneComponent にレコードを持たない場合があります (したがって、optional="true" になります)。
このような結合はお勧めできませんが、少し古くて大規模なシステムがあり、再設計する時間がありません。
Parent が削除されたときに、NHibernate が関連する tOneToOneComponent を削除するようにします。
もちろん、SQL サーバーで削除操作をカスケードすることもできますが、tOneToOneComponent がキャッシュ内のどこかに留まらないように、NHibernate キャッシュをクリアする必要があります。
そのため、on-delete="cascade" を追加しましたが、親を削除すると、SQL は次のように言います。
The DELETE statement conflicted with the REFERENCE constraint
NHibernate が間違った順序でレコードを削除しようとしているようです。
最初に tOneToOneComponent を削除し (存在する場合)、次に親を削除するように NHibernate に指示する方法は?