spring 事务 不能rollback的问题终于解决了
项目中虽然配置了事务,但是总感觉没起作用。
尤其是我在测试service方法时,总是报出一个异常 ?transaction not successfully started .
我开始以为是事务配置的问题,经过反复的检查,发现没错。
?
开始在网上漫无目的的搜索解决方案, 在一片帖子中看到,有人说 使用SessionFactory.getCurrentSession爆出了这个异常,解决办法是改为 SessionFactory.openSession() ,这个倒是给了我灵感。
于是我去检查 hibernateDao(项目中封装的唯一dao),结果发现 session 都是通过 HibernateDaoSupport.getSession() 得到的,而save,update,delete 等是通过get HibernateTemplate() 来实现的,根本没有涉及到 SessionFactory.本来已经放弃这个方法了。一不小心在 save方法中发现了一行代码
this.getSession().beginTransaction().commit(); ?
当时就震惊了,这句话根本就没用嘛,估计以前没配置事务时 自己写着玩的。赶紧把这个注掉,又在 commit()方法中发现了这行代码,注掉。?
?然后运行测试,通过了,事务正常回滚了。
总结一下,在spring使用了声明式事务 ,就不应该在 拦截的 类中 自己维护事务。
?