no-session异常

**

hibernate中出现的no-session异常的原因和解决办法:

**

现象:当使用hibernate框架操作数据库的时候,如果做查询的话会有立即加载(get)和延迟加载(load)
的区别,延迟加载表示,当你查询某个数据(假设是对象)的时候,hibernate不会立马发送sql语句,而是当我们调用这个对象的属性的时候,也就是真正使用查询出来的数据的时候才会发送sql语句去一级缓存(即session,这里的session和域对象session没有半毛钱关系)中获取,但是正常这个session的开启核关闭是在service层执行的,但是我们真正使用查询的对象的数据时,是在web层,但是这个时候session已经关闭,就会报no-session异常。

原因:就是session的关闭是在真正使用数据(这时候发送sql语句)之前。
即web层使用对象的属性的时候,session已经关闭

解决办法:让session的关闭时间要在web层使用完之后。
但是web层已经是最后一层了,怎么办?还有比web更后的东西哦,就是过滤器,
所以在web.xml中配置开启和关闭session的过滤器即可
但是要配在struts的过滤器之前,否则无效

<filter>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <url-pattern>*.action</url-pattern>
</filter-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值