JPA (RollBack-duvida tecnica)

1 resposta
D

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 ?

1 Resposta

rafaelglauber
faça esse teste no tratamento de exceção: if( entityManager.getTransaction().isActive()){

entityManager.getTransaction().rollback();

}
Criado 22 de outubro de 2007
Ultima resposta 22 de out. de 2007
Respostas 1
Participantes 2