Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate 延迟加载依赖于数据库?_Hibernate_Jpa_Lazy Loading_Wicket - Fatal编程技术网

Hibernate 延迟加载依赖于数据库?

Hibernate 延迟加载依赖于数据库?,hibernate,jpa,lazy-loading,wicket,Hibernate,Jpa,Lazy Loading,Wicket,我们的应用程序设计为3层应用程序,使用 *数据层中的Spring数据JPA(1.8.2.RELEASE)、Hibernate(4.3.10.Final) *服务层中Spring管理的POJO(@Service bean) *GUI层中的Wicket(7.2.0) 我知道,而且我也知道在GUI层使用JPA托管bean时可能会出现的问题(延迟加载、equals、hashcode等)。为了解决这个问题,我们使用Wickets LoadableDetachableModels在每个请求期间重新加载每个实

我们的应用程序设计为3层应用程序,使用 *数据层中的Spring数据JPA(1.8.2.RELEASE)、Hibernate(4.3.10.Final) *服务层中Spring管理的POJO(@Service bean) *GUI层中的Wicket(7.2.0)

我知道,而且我也知道在GUI层使用JPA托管bean时可能会出现的问题(延迟加载、equals、hashcode等)。为了解决这个问题,我们使用Wickets LoadableDetachableModels在每个请求期间重新加载每个实体

现在我们有了一个页面,用户可以在其中选择树中的实体。实体封装在前面提到的LoadableDetachableModel中。此实体与另一个实体具有1:n关系。当通过树选择实体时,1:n关系被访问,导致众所周知的
org.hibernate.LazyInitializationException:未能延迟初始化角色集合:com.isb.bppm.wm.model.Product.children,无法初始化代理-无会话
异常

这非常令人困惑,因为这只在将DB2配置为数据库时发生。对于本地开发,我们使用内存中的ApacheDerby,其中相同的代码不会导致上述异常。到目前为止,我的分析将数据库作为两种配置之间的唯一区别。让我进一步提到,我们对每个请求都使用Springs OpenEntityManagerInViewFilter,因此不应该出现没有打开会话的情况


你们中有没有人遇到过类似的问题,可以给我们一个提示,什么地方可能出了问题?

多亏了Thorsten,我检查了我们的代码中没有正确分离的模型。事实上,这是正确的暗示。我们自己的LoadableDetachableModel实现使用equals和hashcode,就像org.apache.wicket.model.model一样。这导致模型对象在分离后立即被附加,因为日志记录器在日志注释中使用了model的hashcode来表示modelobject已分离

通过检查作为loadableDetachableModel实现成员的实体ID来实现equals和hashcode,修复了这个问题。这为我们提供了很好的服务,因为ID保证不为null,当然也是唯一的


无论如何,问题仍然存在,为什么仅仅更改数据库连接就可以发现这个问题?

多亏了Thorsten,我检查了代码中没有正确分离的模型。事实上,这是正确的暗示。我们自己的LoadableDetachableModel实现使用equals和hashcode,就像org.apache.wicket.model.model一样。这导致模型对象在分离后立即被附加,因为日志记录器在日志注释中使用了model的hashcode来表示modelobject已分离

通过检查作为loadableDetachableModel实现成员的实体ID来实现equals和hashcode,修复了这个问题。这为我们提供了很好的服务,因为ID保证不为null,当然也是唯一的


无论如何,问题仍然存在,为什么仅仅更改数据库连接就可以发现这个问题?

很难帮助一个(甚至是非常基本的)示例。您确定每个LoadableDetachableModel都已正确分离吗?通过将其传递给标准wicket组件,或者通过在onDetach()方法中分离,我将在周一进行检查。谢谢你的提示。到现在为止,我猜模型都是通过setDefautModel()设置的。将在周一评论一个很难帮助(甚至很基本)的例子。您确定每个LoadableDetachableModel都已正确分离吗?通过将其传递给标准wicket组件,或者通过在onDetach()方法中分离,我将在周一进行检查。谢谢你的提示。到现在为止,我猜模型都是通过setDefautModel()设置的。我将在周一发表评论。早在2009/10年,我就在Wicket 1.4中调查过这个问题。潜在差异:部署/开发模式;系列化策略;不同的网络容器?特别是在本地开发时,我们很少看到这些错误。。。我认为它们没有真正被序列化/反序列化,加上hibernate的线程可能是相同的。。。但我需要再次调查。我们解决了这个问题,将其添加到我们的编码指南中,并让每个人都知道潜在的问题(因此在代码审查期间也会对其进行检查)。早在2009/10年,我就在Wicket 1.4中调查了这个问题。潜在差异:部署/开发模式;系列化策略;不同的网络容器?特别是在本地开发时,我们很少看到这些错误。。。我认为它们没有真正被序列化/反序列化,加上hibernate的线程可能是相同的。。。但我需要再次调查。我们解决了这个问题,将其添加到我们的编码指南中,让每个人都知道潜在的问题(因此在代码审查期间也会检查)