hibernate 的lazy策略存在的问题

hibernate的lazy策略是在检索时并不返回完整的类字段,以保证性能,当对具体对象进行实例化的时候,重新连接数据库来填充对象。
这在应用初期常出现的问题就是总碰到session is closed的错误提示,其实很简单,hibernate对数据库的连接都是由它的session统一维持的,当一段程序完成后,session已经关闭,这时再进行实例化,就会出现以上错误,因此,需要重新建立一个seesion来完成操作。(啥,把lazy load设置为false不就得了?那还用hibernate干啥?十几个多表关联下来,自己累不死,数据库也累死了)
 
对于一直使用spring集成hibernate的我,这些事情完全不需要自己来做。
首先我从不自己去操作hibernate,全都通过spring的hibernateTemplate来完成。
其次,spring的强项就是简易AOP,自然不会坐视俺这样的it小工为此操劳。
在spring的orm中,为hibernate提供了三个类来处理lazy load问题:
 
HibernateInterceptor:处理业务逻辑层的问题(普通应用程序),使用ProxyFactoryBean来配置实际业务中的bean,将HibernateInterceptor注入其interceptorNames属性中,则自己的程序就不必操心session的问题了,需要时,spring会帮你建立一个,不需要时,spring会将其关闭。
 
OpenSessionInViewInterceptor:在springMVC中使用,SimpleUrlHandlerMapping中注入interceptors属性内,那么在视图(jsp等)里访问实体对象也ok了。
 
OpenSessionInViewFilter:不用springMVC的就使这个吧,在web.xml中配置一个过滤器,其他的mvc框架也就不受影响了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值