Estoy jugando con Spring + Hibernate y gestión de transacciones "manual" con PostgreSQL Me gustaría probar esto y entender cómo funciona esto antes de pasar a la administración de transacciones basada en aop.HibernateDaoSupport, la transacción no se ha retrotraído
@Repository
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
@Override
public void saveUser(User u) {
Transaction tx = getSession().beginTransaction();
getHibernateTemplate().saveOrUpdate(u);
tx.rollback();
}
}
Llamando saveUser aquí, supongo que al guardar un nuevo usuario se revertirá. Sin embargo, al pasar a una línea de comando psql, el usuario se guarda en la tabla.
¿Por qué no se revierte? ¿Qué tengo que configurar para hacer transacciones de esta manera?
Editar; un poco más la depuración parece indicar getHibernateTemplate() utiliza una sesión diferente de lo getSession() devuelve (?)
Cambiar el código para
Transaction tx = getSession().beginTransaction();
getSession().persist(u);
tx.rollback();
y la transacción se pone deshacerse. Pero todavía no entiendo por qué la HibernateTemplate usaría/crear una nueva sesión ..
La última parte de esto ya se ha solucionado. Quiero entender esto * antes * de entrar en AOP o transacciones basadas en anotaciones. – Anonym
b) es el único culpable en el que puedo pensar a partir de ahora. Es decir. hay un foo mágico pasando. Al final me salté la parte completa y me fui con la sugerencia de la gestión de transacciones basada en anotaciones AOP, deshaciéndose de HibernateDaoSupport e inyectando un LocalSessionFactoryBean directamente en el DAO. Funciona bien. – Anonym