[quote=Hebert Coelho][quote=Rodrigo Sasaki][quote=maior_abandonado]Verifique a exceção que está ocorrendo e coloque um catch para ela.
para tratar qualquer exceção você deve tratar Throwable
nem todas as exceções são tratadas com um catch para Exception algumas, as que são filhas de RuntimeException devem ser tratadas com Essa mesma esxceção filha de RuntimeException ou com alguma classe na sua estrutura de herança (menos Exception).
Pesquise por exceções não verificadas no java.[/quote]
Oi? Como assim? Você pode mostrar um exemplo disso? porque nunca ouvi falar de tal coisa.
@Rodrigo
Depois de invocar saveOrUpdate dê um flush no seu objeto gerenciador (Session, EntityManager ou qualquer outro), veja se assim ele captura a exceção[/quote]Até hoje só vi hibernate jogar runtime exception. Nunca vi throwable ñ…[/quote]
Sim, mas é a melhor forma de você saber o que está acontecendo… imaginem um cenário onde você quer saber do erro independente do que esteja acontecendo, se der qualquer tipo de erro você quer logar ele e depois deixar a exceção acontecer, ou então uma situação que eu inclusive acho o melhor tratamento, você põe um catch para as exceções que você espera que possa acontecer, e um throwable para algo inesperado, logando o problema, opcionalmente usando algum tratamento variavel de acordo com a regra de negócio, dar rollback manual na transação se for o caso, enfim, e opcionalmente lançando essa exceção para cima, de forma que as camadas superiores saibam que algo deu errado, exemplo:
try{
//qualquer coisa de io
catch (FileNotFoundException e) {
//logar
//qualquer outra coisa que você queira
}
catch (IOException e) {
//logar
//qualquer outra coisa que você queira
}
catch (QualquerOutraExcecaoQueVoceQuiser e) {
//logar
//qualquer outra coisa que você queira
}catch (Throwable e) {
//logar erros gerais
//qualquer outra coisa que você queira
throw new RuntimeException("erro inesperado", e);
}
percebam que isso evita a situação do criador do tópico, onde você sabe que deu algum problema, mas não sabe de mais nada…
editando até para acrescentar informação, eu acho que HibernateException deveria ser uma exceção verificada (até por que SQLException é e da mesma forma você pode fazer uma HQL com erros por exemplo, você pode ter problemas semelhantes) considerando que as não verificadas são coisas que o programador deveria cuidar para não acontecer (NullPointerException, AritmeticException…)…
[quote=natanaelv]Se você tratar Throwable pode acabar capturando um Error também, o que indica que estão
ocorrendo sérios problemas na sua aplicação (como falta de memória) e não deve ser tratado.[/quote]
mesmo que o problema que tenha dado seja um Error, eu ainda quero ficar sabendo disso e ver o log, nesse caso especialmente, quanto mais informações do cenário melhor… se for falta de memória em uma aplicação web por exemplo eu posso querer ver o que tem na sessão do usuário ou algo do tipo… lance a exceção depois, mas logue o problema…