Web services 片状冬眠会议?

Web services 片状冬眠会议?,web-services,hibernate,ehcache,Web Services,Hibernate,Ehcache,Hibernate有时会向我抛出此错误:org.Hibernate.LazyInitializationException:无法初始化代理-无会话 现在:我知道,我知道-这意味着我正在操作的实体已从会话中分离,因此它无法初始化任何延迟加载的属性。然而,问题并非100%可重复。这种情况从未在新部署时发生,因此我们通过重新启动受污染的服务器来解决问题(至少在一段时间内) 我们确实启用了内存缓存,但我不知道缓存如何与延迟加载交互,从而导致这个问题。此外,为什么我们永远不会在新服务器上看到这个问题,而只

Hibernate有时会向我抛出此错误:org.Hibernate.LazyInitializationException:无法初始化代理-无会话

现在:我知道,我知道-这意味着我正在操作的实体已从会话中分离,因此它无法初始化任何延迟加载的属性。然而,问题并非100%可重复。这种情况从未在新部署时发生,因此我们通过重新启动受污染的服务器来解决问题(至少在一段时间内)


我们确实启用了内存缓存,但我不知道缓存如何与延迟加载交互,从而导致这个问题。此外,为什么我们永远不会在新服务器上看到这个问题,而只在运行了一段时间的服务器上看到这个问题呢?

当您使用旧的、过时的hibernate会话中的对象时,通常会引发类似的LazyInitializationException异常。例如,假设您有两个请求:

Object o = null;

Request 1:
Session s1 = ...;
o = s1.get(MyObject.class, myId);
s1.close();

Request 2:
o.getFoo().getBar(); //May throw a lazyinit exception

这里,如果请求1中未加载o.foo.bar,将引发LazyInitializationException。您需要修复代码,以便请求2获得一个新会话,该会话具有对象的新副本。这类问题可能很难追踪;当没有处理任何请求时,检查在请求之间保留的对象(我发现jvisualvm或jprobe可能是一个福音)。问题的根源往往不明显;例如,匿名类可能导致引用被保留。

当您使用旧的、过时的hibernate会话中的对象时,通常会引发类似这样的LazyInitializationException异常。例如,假设您有两个请求:

Object o = null;

Request 1:
Session s1 = ...;
o = s1.get(MyObject.class, myId);
s1.close();

Request 2:
o.getFoo().getBar(); //May throw a lazyinit exception

这里,如果请求1中未加载o.foo.bar,将引发LazyInitializationException。您需要修复代码,以便请求2获得一个新会话,该会话具有对象的新副本。这类问题可能很难追踪;当没有处理任何请求时,检查在请求之间保留的对象(我发现jvisualvm或jprobe可能是一个福音)。问题的根源往往不明显;例如,匿名类可能导致引用被保留。

内存中的缓存是hibernate缓存还是与第三方实现不同的东西?它是带有hibernate缓存接口的ehcache。您找到了解决方案吗?我的问题与您描述的相同。内存缓存是hibernate缓存还是与第三方实现不同的东西?它是带有hibernate缓存接口的ehcache。您找到了解决方案吗?我的问题与您描述的相同,请求发生在web服务方法中,因此我们不会在请求之间保留任何内容。每个请求都应该是独立的和相同的;但是,我认为是你的应用程序无意中抓住了什么东西(或者提前结束了会话),直到你能证明不是这样。堆栈跟踪是什么样子的?哦,我希望它在我的应用程序中的某个地方!那就意味着我可以修好它;-)我不确定我是否能以一种有用的方式清理堆栈跟踪。基本上,我们询问一个实体集合是否包含另一个集合(延迟加载)。实际上,它看起来应该在任何地方都会导致错误-调用它的方法不是@Transactional。但它只是有时失败!这个请求发生在一个web服务方法中,所以我们不会在请求之间保留任何内容。每个请求都应该是独立的和相同的;但是,我认为是你的应用程序无意中抓住了什么东西(或者提前结束了会话),直到你能证明不是这样。堆栈跟踪是什么样子的?哦,我希望它在我的应用程序中的某个地方!那就意味着我可以修好它;-)我不确定我是否能以一种有用的方式清理堆栈跟踪。基本上,我们询问一个实体集合是否包含另一个集合(延迟加载)。实际上,它看起来应该在任何地方都会导致错误-调用它的方法不是@Transactional。但它只是有时失败!啊。