1、懒加载的原理:
在hibernate中使用load方法获取所要查询的对象时,其实获取的只是所要获取的对象的一个代理,而且在一获取之后还是一个刚刚new出来的对象,属性没有赋值,但是这个代理对象具有一个新的功能那就是可以查询数据库,当你需要某一个属性时,才查询数据库获取(前提是session没有关闭,而且是同一个session)。
2、懒加载的解决方法:
1)、已查询之后就调用hibernate的Hibernate.initialize(XX)方法初始化对象
2)、对象关系映射文件中配置:lazy="false" <class ... lazy="false"></class>,不适用懒加载
3)、通过使用拦截器或者过滤器延长session的作用范围,延迟session的关闭
在action类中会调用service层的方法,然后调用session.一般当session访问结束之后就会将session关闭.,现在我们通过过滤器将session的关闭放在过滤器中
在web.xml文件中加入一个filter如下:
<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>