Como tratar exception que ocorrem no hibernate

4 respostas
R

Ola, estou com problemas para tratar exception no hibernate, por exemplo:

Session sessao = HibernateUtility.getSession();
Transaction tx = sessao.beginTransaction();

Curso curso = new Curso();
curso.setNome("Desenvolvimento de Software");
curso.setDescricao("Curso só pra programadores");

sessao.save(curso);
transaction.commit();
sessao.close();

Observei que nao foi necessário colocar a rotina sessao.save(curso) dentro de um bloco try catch ! E se por acaso der algum erro e o hibernate nao consiguir persisir o objeto ?

4 Respostas

fmeyer

coloque um tratamento simples de try…catch
implemente uma exception que Identifique claramente oque aconteceu lance sua exception e trate-a, e nao esqueca de dar rollback na transacao :wink:

Se for um ambiente CMT voce vai ter que usar outra abordagem

R

É justamente o que gostaria de fazer, mas acho estrano o hibernate nao lancar nenhuma exception na chamada de suas rotinas. Eu pensei em algo do genero:

try{
 sessao.save(curso);
 transaction.commit();
 sessao.close();
}catch(NaoSeiException ex){
 transaction.rolback();
}

Me pergunto… seria uma RuntimeException !? Como vc implementaria ?
O exemplo do codigo acima foi so como exemplo… mas o tratamento de exception que estou tentando criar esta relacionado aos meus DAOs como segue o artigo do hibernate
http://www.hibernate.org/328.html
Não consegui implementar o tratamento de exception nesse caso.
Desde já muito obrigado.

fmeyer

eu faria algo do genero

public void saveObject (Object instObject) throws MySaveException { 
    try{
        sessao.save(instObject);
        transaction.commit();
        sessao.close();
    }catch(java.lang.Exception ex){
        transaction.rolback();
        throw new MySaveException(ex);
    }
}

Não esquecendo de passar o objeto que contem o stacktrace para sua exception, ou voce ira perder toda a informacao pertinente para tratar o erro.

de uma lida neste post antes de tudo pra entender o pq de tanto cuidado.
http://fragmental.com.br/blog/?p=270

T

fmeyer:
eu faria algo do genero

public void saveObject (Object instObject) throws MySaveException { 
    try{
        sessao.save(instObject);
        transaction.commit();
        sessao.close();
    }catch(java.lang.Exception ex){
        transaction.rolback();
        throw new MySaveException(ex);
    }
}

Não esquecendo de passar o objeto que contem o stacktrace para sua exception, ou voce ira perder toda a informacao pertinente para tratar o erro.

de uma lida neste post antes de tudo pra entender o pq de tanto cuidado.
http://fragmental.com.br/blog/?p=270

capturar a Exception inteira eu acho complicado, pois pode mascarar erros de Runtime que nao tem nada a ver com hibernate
todas as excecoes do hibernate derivam (ou sao encapsuladas) por um HibernateException… capture essa

Criado 13 de novembro de 2006
Ultima resposta 13 de nov. de 2006
Respostas 4
Participantes 3