JPA - Capturar exceção

8 respostas
alves.Felipe

Ola… bom dia a todos…

estou querendo capturar as exceções que podem acontecer quando estou fazendo alguma ação com o jpa…
mas acontece que só consigo capturar a exceção quando uso o Exception… gostaria de poder fazer alguma coisa mais filtrada…
acontece que uso Spring, e verifiquei que sempre (quando for relacionado ao bd.ex: duplicidade com a PK) o org.springframework.transaction.TransactionSystemException
que captura as exceções… e vi tb que ele é um RuntimeException, e pelo que li isso é uma exceção não verificada…

sendo assim, tenho como deixar mais preciso a minha exceção??

abraco

8 Respostas

Mackrophus

Olá alves.Felipe.

Cara, vc gerou tua camada com o Netbeans ou de outra forma?

alves.Felipe

uso o eclipse…

alves.Felipe

mais alguém?

alves.Felipe

?

Lavieri

toda excecao do JPA e' uma PersistenceException

as vezes, vc tera ela dentro de outra excecao, por questoes de camda...

o que vc pode fazer e'
try {

} catch (Exception ex) {
     List<Exception> jaChecadas = new ArrayList<Exception>();
     Exception atual = ex;
     while (!jaChecadas.contains(atual) && atual != null) {
         if (atual instanceof ExcecaoQueVcQuerCapturar) {
             //faz o tratamento aqui que vc quer fazer
             break; //usa o break pra sair do loop
         }
         jaChecadas.add(atual);
         atual = atual.getCause();
     }
     throw ex; //caso nao seja a excecao que vc quer, relanca ela
}
alves.Felipe

blz… eu ja estava fazendo alguma coisa parecida…
mas só para deixar bem claro…
esse tratamento que sera feito no catch, eu tenho que fazer isso no controller e não na minha persistencia, certo?
pois se eu coloco um try catch na minha persistencia, nao pega nada…
pega a exceção apenas onde eu chamo o método que quero, nesse caso o salvar…
me entende?

Lavieri

alves.Felipe:
blz… eu ja estava fazendo alguma coisa parecida…
mas só para deixar bem claro…
esse tratamento que sera feito no catch, eu tenho que fazer isso no controller e não na minha persistencia, certo?
pois se eu coloco um try catch na minha persistencia, nao pega nada…
pega a exceção apenas onde eu chamo o método que quero, nesse caso o salvar…
me entende?

o tratamento so pode fazer onde vc pode realmente trata-la…

não sei o q vc chama de sua persistencia, mas se for algo como um DAO

vc tem q realmente jogar a exceção pra cima… em um DAO não é o lugar correto de se tratar a exception.

normalmente a exceção só ocorre após um commit() se for um problema no banco, é só nessa hora que vc verá o problema ocorrer, isso para chaves duplicadas e outras coisas mais…

alves.Felipe

valeo cara…
era bem isso que eu tava querendo confirmar…
abraco

Criado 16 de março de 2010
Ultima resposta 19 de mar. de 2010
Respostas 8
Participantes 3