「写真」オブジェクト用に次のマッピングファイルがあります(簡潔にするために編集)。
<hibernate-mapping ... default-access="property" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" name="Photo" table="Photos">
<id name="PhotoId" unsaved-value="0">
<column name="PhotoId" />
<generator class="native" />
</id>
...
<bag name="Comments" table="Comments" lazy="false" order-by="DateTimePosted desc" cascade="all-delete-orphan" inverse="true">
<key column="PhotoId" />
<one-to-many class="Comment" />
</bag>
</class>
'Comments'バッグに対してWhere句を適用して、'Approved'プロパティ=trueのコメントのみを取得したいと思います。ただし、これを設定すると、削除されたPhotoオブジェクトがwhere句の条件を満たさなかったため、削除された未承認のコメントがカスケードされない(孤立したコメントレコードが残る)という問題シナリオに遭遇しました。本質的には、カスケード削除を除いてwhere句を順守する必要がありました。その場合、写真が削除されたときに、写真に関連付けられたコメントを常に削除する必要がありました。
これが私のコメントマッピングファイルの編集されたコピーです:
<hibernate-mapping ... default-access="property" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" name="Comment" table="Comments">
<id name="CommentId" unsaved-value="0">
<column name="CommentId"></column>
<generator class="native" />
</id>
<property name="DateTimePosted" not-null="true" />
...
<property name="Approved" not-null="true" />
<many-to-one name="Photo">
<column name="PhotoId" />
</many-to-one>
</class>
どうすればこれを回避できますか?