Hibernate懒加载异常说明及其解决方法

在集成ssh2三大框架的时候很容易就会造成懒加载异常,通常显示的错误信息是:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

懒加载异常出现的原因:

技术分享

我们在Action中调用Service中的方法,方法中开始时open session,当调用结束后close session,例如类User中有一个Department属性,我们使用Hibernate查询一个User时,hibernate默认是懒加载的,此时查询出的User不会把Department中所有的信息查询出来。当session 关闭后我们在Result中(例如在jsp中打印department.name)使用到了Department的name属性时就会出现懒加载异常。

 

解决方案:

技术分享

我们不在方法结束的时候关闭session,在执行完Action Result之后,通过过滤器关闭session,具体如下:

使用OpenSessionInViewFilter解决解决懒加载问题,在web.xml中配置:

<!-- 配置Spring的OpenSessionInViewFilter,以解决懒加载问题 -->

<filter>

  <filter-name>OpenSessionInViewFilter</filter-name>

   <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>

</filter>

<filter-mapping>

  <filter-name>OpenSessionInViewFilter</filter-name>

   <url-pattern>*.action</url-pattern>

</filter-mapping>

作用是拦截".action“结尾的请求,OpensessionInViewFilter的作用是将session延时关闭。

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。