我有2个Hibernate对象:
Dero和Motif。
Dero有一套Motif。
我从数据库加载Dero对象。但是当我尝试访问它的Motif集时:
assertEquals(dero.getMotifRefus(),deroFromDB.getMotifRefus());
我得到一个例外:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection
of role: com.dossier.Derogation.motifRefus, no session or session was closed
at
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
我该如何解决这个问题?
答案 0 :(得分:2)
在初始化懒惰的Motif集之前,看起来提取Dero的会话已关闭。根据您的环境和使用案例,有不同的方法可以解决这个问题。
你在谈论一个Spring驱动的webapp,OpenSessionInViewFilter
将适合你
<filter>
<filter-name>OpenSessionFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
我敢打赌,类似的解决方案可用于任何网络应用程序。
这篇文章可能会有帮助:Open Session in View (hibernate.org)
答案 1 :(得分:0)
OSIV(Open Session In View)模式只是一种模式,因此您可以查看Spring实现的源代码并使其适应您的EntityManager(EM在Hibernate中称为Sessions,EMF称为SessionFactories) )。另请查看Hibernate站点上的this并进行调整。