cascade delete-orphan を使用して別のエンティティを削除する際に問題が発生しています。関連するセット コレクションをクリアすると機能しますが、セット コレクションを null にすると機能しません。詳しく説明しましょう。構成スニペット:
<class name="com.sample.CategoriesDefault" table="cats">
<id name="id" column="id" type="string" length="40" access="property">
<generator class="assigned" />
</id>
<version name="version" column="objVrs" unsaved-value="negative"/>
<set name="bla" lazy="false" cascade="all-delete-orphan" inverse="true">
<key column="idCats" not-null="true"/>
<one-to-many class="com.sample.BLA"/>
</set>
<class name="com.sample.BLA" table="blaTEST">
<id name="id" column="id" type="string" length="40" access="property">
<generator class="assigned" />
</id>
<version name="version" column="objVrs" unsaved-value="negative"/>
<property name="bla" type="string" column="bla"/>
<many-to-one name="parent" class="com.sample.CategoriesDefault" column="idCats" not-null="true"/>
</class>
私のサンプルコード:
Categories cats = new CategoriesDefault();
final Set<BLA> col = new HashSet<BLA>();
col.add(new BLA(cats));
cats.setBla(col);
cats.saveOrupdate(); // will update/insert it in the db.
以下は正しく機能します。つまり、すべてのコレクション項目がデータベースからすべて移動されます。
cats.getBla().clear();
cats.saveOrUpdate();
このメソッドを呼び出すと、Hibernate の PersistSet がダーティとしてマークされるため、これは機能すると思います。
ただし、以下は、私が望む/期待するように、上記と同じようには機能しません。
cats.setBla(null);
cats.saveOrUpdate();
データベースから猫アイテムをリロードすると、まだ BLA アイテムが含まれており、Hibernate によって削除ステートメントが生成されません :(.. なぜでしょうか??... またはこれはバグですか? 私は 3.6.0.Final を使用しています。