could not initialize proxy - no Session解决办法

could not initialize proxy - no Session错误


报错出现情况

使用struts+hibernate+springMVC时,使用标准查询Criteria进行联级查询抛出此错误


    //学生实体类
    public class Student {

         private Integer id;
         private String name;
         private String password;
         //班级对象  和学生一对多关系
         private Classes classes = new Classes();
         //课程集合  和学生多对多关系
         private Set<Course> courses = new HashSet<Course>();
    }
    //dao层方法:标准查询会自动查出学生所在班级和所选课程
    public List<Student> getList() {
        return getCurrentSession().createCriteria(Student.class).list();
    }

原因分析(个人理解)

  1. spring的配置文件配置了自动管理事务
  2. 所以在查询完学生表中的数据时,Hibernate会去自动查询关联的其他俩表的数据(班 级和课程信息)
  3. 查询都是依靠session对象执行的。
  4. 但是查完学生表,spring的事务管理会自动将session关闭。
  5. 所以导致后俩个操作无法完成,缺少session。
  6. 故报异常could not initialize proxy - no Session(无法初始化代理对象-没有session)
<property name="hibernateProperties">
    <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
        <prop key="hibernate.show_sql">true</prop>
        <prop key="hibernate.hbm2ddl.auto">update</prop>
        <!-- 配置线程绑定的Session
        factory.openSession : 开启事务/操作/提交事务/关闭session
        getCurrentSession : 获取一个和线程绑定的Session,不需要自己去开启/提交数据,线程结束之后,自动关闭session -->
        <!-- CurrentSession相当于之前的session后者模板对象,作用都是操作数据库当中的数据的,基本都是增删该查 -->
        <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
    </props>
</property>
<!-- 配置事务 -->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 使用Spring的注解来开启事务 -->
<tx:annotation-driven transaction-manager="txManager"/>

业务处理层注解方式添加了spring自动管理事务

@Transactional
@Service("xkService")
public class XkService {
        省略具体内容
}

解决办法

在web.xml中配置用于开启事务的过滤器

  <filter>  
      <filter-name>hibernateFilter</filter-name>  
      <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>  
  </filter>
  <filter-mapping>
    <filter-name>hibernateFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fool_dawei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值