`

Spring+hibernate延迟加载报错解决办法

    博客分类:
  • J2EE
阅读更多
我们在项目中一般都会使用Spring来管理Hibernate的session,
但是在查询数据的时候默认会使用lazy-loading方式的,也就是通常所说的延迟加载,延迟加载方式不同于普通加载,他会在使用到数据的时候才回真正的发出SQL语句,而Spring会自动的关闭session的,那么我们在前端页面做展示的时候问题就来了,我们在后台的时候还没有发出SQL查询session就关闭了,到了前台,需要数据了,这个时候程序就会发出SQL了,但是此时的session已经关闭了,当然就会报错了

解决办法:在Spring中提供了这么一个类,OpenSessionInViewFilter,这个类在上面提到的错误中就有很大的作用了,它会对客户端每次请求分配一个session,将请求结果返回给客户端,并且在完成展现后关闭session。这个类是一个过滤器,在我们配置的URL中就会使用它了,在看看上面的原因,问题不就解决了吗?前端在数据展现完了Spring才回去关闭session,那么就不会有因为延迟加载而报session已经关闭的错误了,

具体做法:既然是Filter,那么肯定是在web.xml中配置了,
<filter>
        <filter-name>hibernateFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>singleSession</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>hibernateFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

注意我这里的映射地址啊,你可以根据你的实际项目需求来制定,我这里的/*指的是每一个请求都会这样。

好了, 问题解决了。希望对出现这个问题的朋友有帮助吧!

这篇文章不错:http://hi.baidu.com/%CE%E2_%F0%A9/blog/item/f213ec354efaf9315bb5f5c3.html
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics