Galera estou com um problem q é o seguinte, se eu tento persistir um objeto uma vez e ocorre um erro no banco( como constraint login único por exemplo), ele não persiste o objeto, mas não consigo dar perisist em mais nada pois ele sempre acusa q o objeto q deu erro não pode ser persistido. Já tentei criar um EntityManager só para a transação só q ai ele fala q persistiu o objeto mas na verdade não persistiu nada. Alguém pode me dar uma luz??
Após um erro do persist() nada mais funciona
3 Respostas
Existem erros que faz rollback automático da transação.
Por que você não tenta evitar que o erro aconteça?
poste o log ai
assim fica mais fácil
Então galera parece q consegui resolver. O que acontecia era o seguinte, por mais q eu prevenisse q isso ocorre-se estava com medo que por algum motivo acontecesse algum erro de banco e meu programa tivesse que ser reiniciado para voltar a funcionar(isso para o usuário seria o fim kkkk).
O que fiz não sei se é certo mas como é uma aplicação Desktop tenho somente um único EntityManager q cuida dos objetos, porém quando dava o erro ele tentava inserir de novo aquele objeto corrompido. O que fiz foi tentar dar um detach() mas não funcionou, ai coloque um clear() dentro da minha classe que controla transações sempre que dava erro de banco.
public abstract class TarefaTransacional {
private EntityManager manager;
public TarefaTransacional(EntityManager manager) {
this.manager = manager;
}
public Boolean executa()
{
Boolean result=true;
EntityTransaction transaction = null;
try {
transaction = this.manager.getTransaction();
transaction.begin();
this.blocoTransacional();
transaction.commit();
} catch(Exception ex) {
ex.printStackTrace();
if(transaction != null && transaction.isActive())
{
transaction.rollback();
}
this.manager.clear();
result = false;
}finally
{
return result;
}
}
public abstract void blocoTransacional();
}
só não sei se vai dar problema futuramente. estou testando aqui pra ver. Se alguém tiver alguma sugestão por favor poste! =D