LazyInitialization异常

时间:2009-10-16 11:27:14

标签: java hibernate java-ee ejb

我有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)

我该如何解决这个问题?

2 个答案:

答案 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并进行调整。