spring里用getCurrentSession获取的session不在事务管理,请教
今天用getCurrentSession就是this.getHibernateTemplate().getSessionFactory().getCurrentSession(),然后发现session不能被关闭。
然后做了几个测试:
情况1、如果使用this.getSession()则session正常关闭,调用多次也没问题。
情况2、如果使用this.getHibernateTemplate().getSessionFactory().getCurrentSession(),始终打开1个session并且不能关闭。
情况3、如果使用this.getHibernateTemplate().getSessionFactory().openSession(),调用几次打开几个session并且都不能关闭。
情况4、如果不使用hibernate的api换用this.getHibernateTemplate()封装的方法,也没有问题。
就是说,凡是通过this.getHibernateTemplate().getSessionFactory()获得的session都不在事务管理内。
而且还有一个现象,如果是通过this.getHibernateTemplate().getSessionFactory()获得的session必须要beginTransaction才能运行不然异常,而this.getSession()则不用。
我使用的是声明式事务,而且情况1和4正常,说明spring的aop事务配置应该是没问题的
然后做了几个测试:
情况1、如果使用this.getSession()则session正常关闭,调用多次也没问题。
情况2、如果使用this.getHibernateTemplate().getSessionFactory().getCurrentSession(),始终打开1个session并且不能关闭。
情况3、如果使用this.getHibernateTemplate().getSessionFactory().openSession(),调用几次打开几个session并且都不能关闭。
情况4、如果不使用hibernate的api换用this.getHibernateTemplate()封装的方法,也没有问题。
就是说,凡是通过this.getHibernateTemplate().getSessionFactory()获得的session都不在事务管理内。
而且还有一个现象,如果是通过this.getHibernateTemplate().getSessionFactory()获得的session必须要beginTransaction才能运行不然异常,而this.getSession()则不用。
我使用的是声明式事务,而且情况1和4正常,说明spring的aop事务配置应该是没问题的
作者: wangyu1221 发布时间: 2011-06-14
没有人知道这个问题是怎么回事?
作者: wangyu1221 发布时间: 2011-06-15