версия: 3.6.0.final
У меня следующая ситуация:
Сущность с коллекцией, содержащей объекты типа значения, с полностью включенным каскадированием.
1) Я удаляю коллекцию и сохраняю ее в БД. Затем загрузите его, чтобы убедиться, что коллекция действительно удалена.
2) Затем я добавляю удаленную коллекцию и снова сохраняю сущность. Затем я загружаю его снова, чтобы проверить результат и заметить, что коллекция пуста, чего не должно быть: (...
Что я делаю не так или это ошибка?
Когда я использую чистую созданную коллекцию в 2), которая не существует объектов Hibernate, она работает нормально .., то есть: коллекция правильно хранится в БД.
В коде мое отображение:
<class name="com.sample.Declaration" table="decl">
<id name="id" column="id" type="string" length="40" access="property">
<generator class="assigned" />
</id>
<set name="statusHistory" table="decl_sts_hist" lazy="false" cascade="all">
<cache usage="read-write" />
<key column="idDec" not-null="true" />
<composite-element class="com.sample.DeclarationStatusDefault">
<property name="remark" column="remark" type="string" length="254" />
<property name="statusName" column="stsName" type="declarationStatusName" not-null="true" update="false" />
</composite-element>
</set>
</class>
код:
// 1): clear the status history
Declaration dec = Persister.findDeclarationById("id");
SortedSet<DeclarationStatus> history = dec.getStatusHistory();
dec.setStatusHistory(null);
dec.saveOrUpdate(); // will call saveOrUpdate on the current session.
Declaration dec = Persister.findDeclarationById("id");
assertNull(dec.getStatusHistory()); // OK
// 2) recover the status history
dec.setStatusHistory(history);
dec.saveOrUpdate(); // will call saveOrUpdate on the current session.
Declaration dec = Persister.findDeclarationById("id");
assertNotNull(dec.getStatusHistory()); // ERROR, is empty like before
Если я создаю новый Set с несколькими записями и сохраняю его, все работает нормально, но когда я сохраняю старую историю, содержащую объекты Hibernate, такие как PersistSet, она НЕ будет храниться в БД ...
Stranggeee .... Это ожидаемое поведение? ... Я больше пахну жуком, или я что-то здесь упускаю ...
Если я отлаживаю код Hibernate, записи коллекции никогда не помечаются как обновленные / воссозданные в методе Collections.prepareCollectionForUpdate (), так как загруженныеPersister и currentPersister по некоторым причинам одинаковы ...
Кто-нибудь есть идеи?