我正在尝试使用Spring+Hibernate和一些“手动”事务管理来操作PostgreSQL。在转向基于aop的事务管理之前,我想尝试并理解这个过程。
@Repository
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
@Override
public void saveUser(User u) {
Transaction tx = getSession().beginTransaction();
getHibernateTemplate().saveOrUpdate(u);
tx.rollback();
}
}
在这里调用saveUser,我想保存一个新用户将被回滚。
然而,移动到psql命令行,用户保存在表中。
为什么不回滚?我需要配置什么才能以这种方式进行事务处理?
编辑:更多的调试似乎表明getHibernateTemplate()使用与getSession()返回的不同的会话(?)
将代码更改为:
Transaction tx = getSession().beginTransaction();
getSession().persist(u);
tx.rollback();
这个事务确实被回滚了。但我仍然不明白为什么hibernateTemplate会使用/创建一个新的session。