我有 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)
如何解决这个问题?
最佳答案
看起来在初始化惰性 Motif 集之前,获取 Dero 的 session 已关闭。根据您的环境和用例,有不同的方法可以解决此问题。
如果您谈论的是 Spring 驱动的 Web 应用程序,OpenSessionInViewFilter
适合您
<filter>
<filter-name>OpenSessionFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
我敢打赌,任何网络应用程序都可以使用类似的解决方案。
这篇文章可能会有所帮助:Open Session in View (hibernate.org)
关于java - 延迟初始化异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1577512/