Está gerando a: java.lang.IllegalStateException: Transaction not active
Problema aqui: em.getTransaction().rollback(); //não deveria desfazer o objeto deletado aqui?!?!?!?!?!?
[code]
//método de deleção de JPA Utilities
public void removerPorChave(Class objeto, Integer chave) {
EntityManager em = getEntityManager();
try {
Object x = getEntity(objeto, chave);
Object y = em.merge(x);
em.remove(y);
em.flush();
em.getTransaction().commit();
em.flush();
} catch (RuntimeException e) {
em.getTransaction().rollback(); //não deveria desfazer o objeto deletado aqui?!?!?!?!?!?
throw e;
} finally {
em.close();
}
}[/code]
[code]
//método dao
public void removeImagem(int idDaImagem){
JPAUtil.getInstance().removerPorChave(PessoaImagem.class, idDaImagem);
JPAUtil.getInstance().flush();
}[/code]
Por que você não usa assim?
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();
}
}
Lucas, perfect!
Funcionou com o código que vc postou…
Valeu,
Dúvida:
Se não der begin() no EntityTransaction nunca funcionará o rollback()?
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.
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.
Parece que ele busca de um cache.
Por favor, alguém sabe como resolver isto?