Hibernate e PostgreSQL

6 respostas
K

Olá.

Estou usando o hibernate com o postgresql e gostaria de uma ajuda. Gostaria de saber como faço para recuperar o erros gerado pelo postgresql.
Por exemplo: ao cadastrar um registro com um id já cadastrado, eu quero identificar qual é o erro e exibir de forma amigável para o usuário.

Alguém tem umas dicas para me dar ? procurei no google e não achei nada.

Obrigado.

6 Respostas

rafaelglauber

Captura a ConstraintViolationException e apresenta a mensagem ao usuário do jeito que você quer, exemplo:

try{ session.save(objeto); } catch(ConstraintViolationException e){ ShowDialogQueVoceCriar("Aqui mensagem que você quiser."); }

Aqui o sumário das exceções lançadas pelo Hibernate: http://www.hibernate.org/hib_docs/v3/api/org/hibernate/exception/package-summary.html

K

Rafael, valeu mesmo. Vou dar estudada no link que você passou.

Obrigado.

rafaelglauber

kurumin:
Rafael, valeu mesmo. Vou dar estudada no link que você passou.

Obrigado.

além de olhar o link procure no google por tratamento de exceções no java, tem o blog do Luca que fala sobre isso e pode ser o gancho para você entender o mecanismo de como as coisas funcionam de maneira crítica. Vale também outros materiais que encontrar sobre o assunto.

ps. lembre que exceções do hibernate já uma especialização, seu sistema tem que ter um controle coeso sobre todas as outras possíveis.

K

Sem problema, estou fazendo um tratamento de exceptions coeso. Fiquei somente com essa dúvida sobre como o hibernate trata essas exceptions. Usando JDBC é bem tranquilo, basta capturar o código de erro que o postgresql gera.

Valeu.

K

Mais uma dúvida: estou usando o Spring + Hibernate.

Ao tentar deletar um registro o postgre retorna uma mensagem de erro dizendo que há relacioanamentos usando esse reegistro.

Estou fazendo um tratamento de exceção utilizando a classe DataAccessException.

Gostaria de saber qual a mensagem de erro e mostrar para o usuário. Sei que tem como fazer isso
através do getSQLState, mas nessa classe de exceção eu não acesso a esse método. Como posso fazer isso ?

Obrigado!

K

Reesolvi assim:

protected String getSQLState(Throwable exception) { String sqlState = null; if (exception.getCause() instanceof ConstraintViolationException) { ConstraintViolationException constraintViolationException = (ConstraintViolationException) exception.getCause(); sqlState = constraintViolationException.getSQLState(); } return sqlState; }

Criado 3 de julho de 2008
Ultima resposta 9 de jul. de 2008
Respostas 6
Participantes 2