![](/img/trans.png)
[英]LazyInitializationException with hibernate and spring mvc
[英]Hibernate JPA, Spring MVC and LazyInitializationException
当尝试从数据库获取项目时,出现此错误:
13:00:13.876 [7838526@qtp-204712603-0] ERROR o.h.LazyInitializationException - failed to lazily initialize a collection of role: bo.myobj, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: de.myob.linkedstuff, no session or session was closed
我知道切换到eager而不是lazy loading可以解决此问题,例如
@OneToMany(mappedBy = "myobj", cascade = CascadeType.ALL, fetch=FetchType.EAGER)
而且我也明白不鼓励急于加载。 为了解决这个问题,最佳实践是什么?
这是一个常见问题,通常是由休眠Session
关闭后呈现视图引起的。 常见的解决方案是使用“ 在视图中打开会话”模式,该模式将在Web请求的整个生命周期中保持休眠会话的打开状态。
Spring带有实现此模式的过滤器 。 例如,要为您的应用程序中的所有JSP文件启用它,请将类似以下内容添加到您的web.xml
:
<filter>
<filter-name>osivFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>osivFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
持久层和其他层之间的更好隔离。 确保持久层产生的对象不包含对Hibernate的任何引用。
休眠,摆脱我的POJO! 可能会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.