现在的位置: 首页 > 综合 > 正文

Spring中解决Hibernate的lazy加载问题

2012年06月18日 ⁄ 综合 ⁄ 共 1147字 ⁄ 字号 评论关闭
 今天又花了一天时间做单位的搜索网站,主要是增加权限管理的功能,完成了一部分功能,今天的时间主要花在了,spring中调用hibernate的问题,碰到两个问题。一个是双向多对多关联问题,一个是设置lazy=true时的问题。关于第一个多对多问题,原来是把多对多关联,分解为两个一对多关联,但是在spring中,调用getHibernateTemplate保存对象总是报错,呵呵,错误记不得了。也始终没弄明白什么原因。后来想想就改用,组件类集合来处理多对多关联,也就是用composite-element来映射. 第二个问题当lazy=true时,使用的是延迟加载,如果想在读取对象时显示的调用关联的对象,则在hibernate中要用initialize来显示调用,但是在spring中就会报disconnected session的错。

  上网找找资料,终于找到原因和解决的办法,在spring中通过getHibernateTemplate()来调用load和initialize,每一个getHibernateTemplate调用都会新开一个session,调用完就关闭了这个session.所以在第二次调用getHibernateTemplate().initialize来显示调用关联对象时就是报disconnected session的错。找到一个比较简单一点的解决的办法,就是用spring的OpenSessionInView.     OpenSessionInViewFilter可以等到请求回到filte以后再把session关掉,在web.xml里面配置一下就好用了:

       <filter>
 <filter-name>hibernateFilter</filter-name>
 <filter-class>org.springframework.orm.hibernate.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>singleSession</param-name>
            <param-value>false</param-value>
        </init-param>
     </filter>
     <filter-mapping>
 <filter-name>hibernateFilter</filter-name>
 <url-pattern>/*</url-pattern>
     </filter-mapping>

加上这段时就OK了~~虽然今天碰到了一些问题,不过也有不少的收获,希望以后还能继续进步~~~~~

 

抱歉!评论已关闭.