java.lang.IllegalStateException: Transaction not active
Problema aqui:
em.getTransaction().rollback(); //não deveria desfazer o objeto deletado aqui?!?!?!?!?!?
//método de deleção de JPA UtilitiespublicvoidremoverPorChave(Classobjeto,Integerchave){EntityManagerem=getEntityManager();try{Objectx=getEntity(objeto,chave);Objecty=em.merge(x);em.remove(y);em.flush();em.getTransaction().commit();em.flush();}catch(RuntimeExceptione){em.getTransaction().rollback();//não deveria desfazer o objeto deletado aqui?!?!?!?!?!?throwe;}finally{em.close();}}
//método dao publicvoidremoveImagem(intidDaImagem){JPAUtil.getInstance().removerPorChave(PessoaImagem.class,idDaImagem);JPAUtil.getInstance().flush();}
public void removerPorChave(Class objeto, Integer chave) {
EntityManager em = getEntityManager();
EntityTransaction etx = em.getTransaction();
try {
etx.begin();
Object x = getEntity(objeto, chave);
Object y = em.merge(x);
em.remove(y);
etx.commit;
} catch (RuntimeException e) {
etx.rollback(); //não deveria desfazer o objeto deletado aqui?!?!?!?!?!?
throw e;
} finally {
em.close();
}
}
A
andredecotia
Lucas, perfect!
Funcionou com o código que vc postou…
Valeu,
A
andredecotia
Dúvida:
Se não der begin() no EntityTransaction nunca funcionará o rollback()?
lucas_carvalho100
Você deve iniciar a transação sempre que for fazer update,delete e insert, agora select não é necessário transação…
Sempre use transação.
A
andredecotia
100% entendido. Valeu.
M
maxsilvabh
Olá,
Estou com um problema que é quando ao deletar, no commit ocorre uma exceção (pelo registro ser uma chave estrangeira por
exemplo). Quando isto ocorre, ok, eu trato a exceção. Porém sempre que eu usar um “find” do JPA com um id se
tentou excluir, ele retorna null, sendo que no BD o registro existe, já que a transação (commit) tinha falhado.