Ola pessoal.
Veja se alguem pode me ajudar a entender um poco melhor o conceito de rollback.
Estou com o seguinte problema:
try {
entityManager.getTransaction().begin();
entityManager.persiste(obj);
entityManager.getTransaction().commit();
} catch(Exception e) {
entityManager.rollback();
}
Este codigo acima funciona perfeitamente para inserir registros.
Porem para testar o rollback, cadastrei um registro propositalmente com um campo definido como unico e com um valor repetido para gerar uma exception de violation constraint. (estou usando mysql com tabelas innodb).
Comportamento do codigo acima:
No .begin(); a Transaction fica com .isActive() = true.
No .persiste(); executa sem problemas.
Porem no .commit(); ocorrem dois fatos:
- uma exception de violation constraint é lançada;
- e a Transaction() fica com .isActive = false.
No catch(exception e) a exception é capturada sem problemas.
Porem no .rollback() outra exception é lançada pois a Transaction.isActive() = false neste instante.
Alguem pode me ajudar ?