Então, eu estou usando um DAO genérico e quando vou fazer dar o persist(), se ela já existir, bastaria somente capturar a exceção e continuar, mas ele não captura.
Tentei dar o catch em cima do persist() mas ele não captura e nem nada.
Então, tentando capturar Exception ele capturou e printou a stackTrace, mas quando ele retorna pra outra classe da camada de persistência, a qual possui o
Agora ponha um try-catch no commit e trate-o, verifique se resolveu seu problema.
O commit é diferente do save, ou persist, pois ele termina o fluxo de trabalho, e como deu erro no save, teoricamente o commit ira gerar uma exception.
Agora ponha um try-catch no commit e trate-o, verifique se resolveu seu problema.
O commit é diferente do save, ou persist, pois ele termina o fluxo de trabalho, e como deu erro no save, teoricamente o commit ira gerar uma exception.
Correto. Mas se eu for tratar o commit dentro do catch, como a transaction vai ser “encerrada”?
no catch você manda um rollback e fecha a transação.
R
rof20004
Acredito que se nao der erro ela vai ser encerrada normalmente, caso de algum erro, voce pode fechar manualmente =D
B
bobleujr
Sim, esse é o ponto, eu dei o rollback no catch, ele apontou “Transaction marked as rollBackOnly”, não há um meio de parar a transaction no braço, há?
Eu testei fechando a entity manager com EntityManager.close(), mas o desempenho vai lá em baixo
Hebert_Coelho
bobleujr:
Sim, esse é o ponto, eu dei o rollback no catch, ele apontou “Transaction marked as rollBackOnly”, não há um meio de parar a transaction no braço, há?
Eu testei fechando a entity manager com EntityManager.close(), mas o desempenho vai lá em baixo
Se já deu isso, os dados já não serão inseridos.
Agora, uma dúvida… Você está usando EJB ou Spring para gerenciar a transação?
B
bobleujr
Ainda não, mas acho melhor me informar sobre, haha!
Hebert_Coelho
bobleujr:
Ainda não, mas acho melhor me informar sobre, haha!
Só não entendi pq você perde performance ao fechar um entitymanager. O que acontece?
B
bobleujr
Por causa do delay de criação de um novo objeto. Seria como se a cada transação errada ele tivesse que criar uma nova entitymanager, a qual tem um custo alto de tempo, pelo menos pelo que pude observar até agora !
Hebert_Coelho
bobleujr:
Por causa do delay de criação de um novo objeto. Seria como se a cada transação errada ele tivesse que criar uma nova entitymanager, a qual tem um custo alto de tempo, pelo menos pelo que pude observar até agora !
Até hoje só vi esse problema quando o EntityManagerFactory é criado o tempo todo e não EntityManager… bizarro…
R
rof20004
Yeah, muito estranho, nunca tive esse problema de delay ou coisa parecida.