Hibernate -- NoSession问题分析和解决

前言:对Hibernate出现NoSession问题进行分析和解决。

一、问题分析
1、为什么会出现NoSession?
① 从字面理解NoSession的原因是没有获取到Session,那为什么获取不到Session了,通常在Service层中所有Dao层操作完毕提交事务后,Session就会被关闭。在此时如果再次执行Dao层操作就必须获取Session,但是Session已经关闭所有就会报NoSession。

2、为什么会出现Dao查询之后会再次出现Dao操作呢?
在Hibernate中的五种查询方式的OID方式中有get()和load()两方法,其中load()方法为延迟加载。延迟加载就是在使用到数据的时候才会去发Sql查询,而使用load()方法查询就是这种情况,只有你使用到你要查询的数据对象时才会发送Sql。

二、解决方案
1、既然是延迟加载那么就可以让其立即加载使用get()方法,但是并不适用。因为立即加载会使一次查询时间较长,影响查询效率。

2、在web.xml中配置View层获取当前线程绑定Session的过滤器。

<!-- 在View层获取当前线程绑定的Session -->
  <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>/*</url-pattern>
  </filter-mapping>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值