У меня проблемы с удалением другого объекта через каскадное удаление-сирота.Это работает, когда я очищаю связанную коллекцию множеств, но не когда я делаю коллекцию нулей.Позвольте мне объяснить подробно.Фрагмент конфигурации:
<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();
Я думаю, что это работает, поскольку PersistSet из Hibernate помечается как грязный при вызове этого метода.
Следующее, однако, не работает так, как описано выше, как я хотел бы / ожидал.
cats.setBla(null);
cats.saveOrUpdate();
Если я перезагружу элемент кошек из БД, он по-прежнему содержит элементы BLA, и Hibernate не генерирует оператор удаления :( .. Почему бы нет ?? ... или это ошибка?Я использую 3.6.0.Final.