Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate ehcache仅查找集合的1个元素_Java_Hibernate_Ehcache - Fatal编程技术网

Java hibernate ehcache仅查找集合的1个元素

Java hibernate ehcache仅查找集合的1个元素,java,hibernate,ehcache,Java,Hibernate,Ehcache,所以,我真的在这里抓住吸管的想法。(另请注意:这是间歇性故障) 我有一个包含“子”对象集合的“父”对象: … … … … 如果我运行如下查询: “从子类子类中选择子类”+ “其中child.parent=:parent”; 它找到了所有的孩子。太好了 但是,如果我搜索父对象(并找到它),hibernate将遍历并创建我的父类,但只填充子类中的一个子类(第一个子类)。实际上,我在hibernate代码中进行了调试,发现实际上,对ParentClass上setChildren()

所以,我真的在这里抓住吸管的想法。(另请注意:这是间歇性故障)

我有一个包含“子”对象集合的“父”对象:















如果我运行如下查询: “从子类子类中选择子类”+ “其中child.parent=:parent”; 它找到了所有的孩子。太好了

但是,如果我搜索父对象(并找到它),hibernate将遍历并创建我的父类,但只填充子类中的一个子类(第一个子类)。实际上,我在hibernate代码中进行了调试,发现实际上,对ParentClass上setChildren()的调用只发送了一个1元素的集合——当我知道第一个查询中有更多元素时

所以,我使用的是EHCache,清除它并没有什么好处:调用CacheManager.getInstance().clearAll()

重新启动我的应用程序确实有效。只是在一个看似随机的父对象实例上不久它就崩溃了

据我所知,没有任何事情是直接导致这种情况的。有没有人知道会导致这种情况的hibernate bug,或者EHCache bug。我在缓存上正确地调用clear吗

任何指针都可以

我使用的是Hibernate3.2.6,mysql和postgres上也出现了同样的问题


编辑:我还应该补充一点,这个只有1个元素的集合处于一种“从不存在”的状态。也就是说,从来没有一个事务只产生一个子元素,你的子类是什么?Hibernate是否可能看到多个子类作为等价类附加到同一父类,因此只保留其中一个子类?

您的子类是否存在?Hibernate是否可能看到多个子类作为等价类附加到同一父类,因此只保留其中一个子类?

结果表明,在某一点上,我们在获取审阅时正在执行“连接获取”。join-fetch意味着,对于子级集合,只返回与my-where子句匹配的子级。假设我有3个children>10和1个children<10,如果我的where子句说children<10,它返回父对象,一组children只包含一个children。这很好,这就是“join fetch”的作用

错误的是Ehcache不知道这个父对象是“不完整的”,所以它将这个不完整的值存储在缓存中。下一次我想要“完整”父对象时,我得不到它,我得到的是不完整的父对象,Hibernate不会告诉我(不知道)其他情况


编辑:注意,这只是偶然的,每次它发生时,它只有一个子元素。有可能会有更多。

事实证明,在某一点上,我们在获取评论时正在进行“加入获取”。join-fetch意味着,对于子级集合,只返回与my-where子句匹配的子级。假设我有3个children>10和1个children<10,如果我的where子句说children<10,它返回父对象,一组children只包含一个children。这很好,这就是“join fetch”的作用

错误的是Ehcache不知道这个父对象是“不完整的”,所以它将这个不完整的值存储在缓存中。下一次我想要“完整”父对象时,我得不到它,我得到的是不完整的父对象,Hibernate不会告诉我(不知道)其他情况


编辑:注意,这只是偶然的,每次它发生时,它只有一个子元素。可能还会有更多。

很抱歉这条无聊的评论,但是
hashCode()
:)如果这些都不正确,那么(大概)会一直返回错误的子项。不过,我还是仔细检查了一下,它们是正确的。谢谢你的想法,谢谢你的无聊评论,但是如果这些都是错误的,那么它(大概)会一直返回错误的子项。不过,我还是仔细检查了一下,它们是正确的。谢谢你的主意