【发布时间】:2011-01-28 17:42:59
【问题描述】:
我正在使用 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 会使用/创建一个新会话..
【问题讨论】: