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事务配置应该是没问题的

作者: wangyu1221   发布时间: 2011-06-14

没有人知道这个问题是怎么回事?

作者: wangyu1221   发布时间: 2011-06-15