シナリオは次のとおりです。
Parentという名前の 3 つのオブジェクト (名前を簡略化しました) があります。親の子と子の子、
親の子は親のセット、子の子は子のセットです。
マッピングは次のとおりです(関連部分)
親
<set name="parentset"
table="pc-table"
lazy="false"
fetch="subselect"
cascade="all-delete-orphan"
inverse="true">
<key column=FK_ID_PC" on-delete="cascade"/>
<one-to-many class="parentchild,parentchild-ns"/>
</set>
親の子
<set name="childset"
table="cc-table"
lazy="false"
fetch="subselect"
cascade="all-delete-orphan"
inverse="true">
<key column="FK_ID_CC" on-delete="cascade"/>
<one-to-many class="childschild,childschild-ns"/>
</set>
私が達成したいのは、親を削除すると、子の子までカスケード削除が行われることです。しかし、現在起こっていることはこれです。
(これは純粋にマッピング テスト目的のためです) 親エンティティを取得します (正常に動作します)
IQuery query = session.CreateQuery("from Parent where ID =" + ID);
IParent doc = query.UniqueResult<Parent>();
今削除部分
session.Delete(doc);
transaction.Commit();
カスケードと逆で「null値を挿入できません」というエラーを解決した後、このコードですべてが削除されることを願っていますが、親のみが削除されています。
見逃されそうなマッピングの何かを見落としていませんか? 正しい方向へのヒントは大歓迎です!
ディエゴ、要点を答えてくれてありがとう。(と説明)
これはon-delete="cascade"
、データベースではなくコードで可能な限り多くの制御が必要なためです。
以下に投稿されたコードは、(動作中の) 結果です。
親
<set name="parentset"
table="pc-table"
cascade="all-delete-orphan"
inverse="true"
batch-size="5">
<key column=FK_ID_PC"/>
<one-to-many class="parentchild,parentchild-ns"/>
</set>
親の子
<set name="childset"
table="cc-table"
cascade="all-delete-orphan"
batch-size="5"
inverse="true">
<key column="FK_ID_CC">
<one-to-many class="childschild,childschild-ns"/>
</set>
これが同じ問題を抱えている人々に役立つことを願っています!