動作があいまいおよび/または危険な場合のHibernateマッピングの質問。カスケード削除孤立条件とコレクション内のアイテムを制限するwhere条件を持つ1対多の関係があります。ここでのマッピング-
<hibernate-mapping>
<class name="User" table="user" >
<!-- properties and id ... -->
<set table="email" inverse="true" cascade="all,delete-orphan" where="deleted!=true">
<key column="user_id">
<one-to-many class="Email"/>
</set>
</class>
</hibernate-mapping>
ここで、1つ以上のEメールオブジェクトに関連付けられているUserオブジェクトがあり、そのうちの少なくとも1つが削除されたプロパティの「true」値を持っているとします。Userオブジェクトでsession.delete()を呼び出すと、次の2つのうちどれが発生しますか?
- ユーザーと、deleted=trueを持つオブジェクトを含むすべてのEメールオブジェクトが削除されます
- 削除されたユーザーとEメールオブジェクト!=nullが削除されます。
一方では、シナリオ1)はwhere条件を無視しますが、これはドメインモデルによっては正しくない可能性があります。ただし、シナリオ2)では、親が削除され、子(電子メール)テーブルの結合キーに外部キー制約がある場合、削除コマンドは失敗します。どちらが起こり、なぜですか?これは、Hibernateの機能があいまいになる可能性があることを示すもう1つの例ですか?