所以,我真的很想在这里寻找想法。(另请注意:这是一个间歇性问题)
我有一个带有“子”对象集合的“父”对象:
<parent stuff>
...
<set name="children" inverse="true" order-by="child_id">
<cache usage="read-write"/>
<key column="parent_id"/>
<one- to-many class="ChildClass"/>
</set>
...
</parent>
<child stuff>
...
<many-to-one name="parent"
column="parent_id"
insert="true"
更新="true"
非空="true"
类="ParentClass"
index="idx_child_parent"/> ...
</child>
如果我运行如下查询:“从 ChildClass 中选择子项”+“其中 child.parent = :parent”;它找到所有的孩子。完美的。
但是,如果我搜索父对象(并找到它),hibernate 会通过并创建我的 ParentClass,但只填充一个(第一个)孩子的孩子。我实际上调试了休眠代码,发现实际上对 ParentClass 上的 setChildren() 的调用只被发送了一个元素集合——当我知道第一个查询中还有更多元素时。
所以,我正在使用 EHCache,并清除它没有好处:调用 CacheManager.getInstance().clearAll();
重新启动我的应用程序确实有效。只是因为它在一个看似随机的父母实例上不久就中断了。
没有任何事情(我知道)发生直接导致这种情况。有谁知道会导致此问题的休眠错误或 EHCache 错误。我在缓存上正确调用 clear 吗?
任何指针都会很好。
我使用的是hibernate 3.2.6,同样的问题也发生在mysql和postgres上。
编辑:我还应该补充一点,这个只有 1 个元素的集合处于一种“从不存在”的状态。IE。从来没有只产生 1 个子元素的交易