为什么要在web.xml里面配置延时加载

filter是在web.xml中配的,跟spring没关系,你说的延迟加载时hibernate的吧
<filter>
<filter-name>openSession</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
举个例子,web项目访问一般是来一个请求,经过action层,然后service层,最后去dao层查数据库,假设你在数据库中存放的是能与你实体类中Person类(随便假设一个)映射的一些字段,你通过id借助hibernate在dao层查出来的某个Person对象(比如这种代码:session.load(Person.class, id),参数先后顺序忘记了,你可以自己看一下api)如果是load方法得出的话是一个代理对象,你如果不调用Person类中的各种get他里面属性的方法是不会真证调用sql语句去查的,而一般我们习惯在action层把查到的Person放到request中(request.setAttribute("person", person))这样,然后在前台通过el表达式之类的东西取出来,但是早在dao层中这次数据库的绘话session已经关闭了,所以你在jsp中通过el表达式取值的话肯定是会报错的,当然如果你在查询的时候是通过get方式查的话,当时立即就会发出sql语句把你的Person类中的各个属性全都填充完毕,这样就不会出现类似的情况了,第一种情况的解决办法就是配一个你说的opensessionInviewFilter,这样可以保证在你在页面中取Person的属性的时候session一直是开的,这样也不会报错,至于你说的什么例外,我想应该是你听哪个蹩脚的老师讲的吧,你所谓的例外应该就是异常的意思,就是我说由于session关闭无法发送sql语句取到Person各个属性报的异常。这么说你应该可以理解了吧,否则我也无能为力了。
蛮牛逼,意思是取到数据之后commit后session关闭导致我们取不到数据,设置之后延迟加载
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值