版本: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
如果我创建了一套新的有几个条目和存储,这一切工作正常,但是当我保存包含Hibernate对象的旧历史记录,就像PersistSet一样,它不会被存储在数据库中... Stranggeee ....这是预期的行为吗?...我更喜欢臭虫的味道,或者我在这里错过了一些东西。 ..
如果我调试Hibernate代码,收集条目从未被标记为更新/重建的方法Collections.prepareCollectionForUpdate(),因为loadedPersister和currentPersister是出于某种原因相同......
有谁知道?
是的,它必须是assetNotTrue,谢谢....你的声明是不正确的,尝试它。父母之间的关系当然也需要明确,孩子也是一个实体,但是当孩子也是一个实体的时候,就像他的父母一样。在这种情况下,Hibernate具有完全控制权并能够发出变化信号。自己测试一下,你会看到它。谢谢 – edbras 2011-01-30 11:35:51