Exclusão utilizando Hibernate

7 respostas
K

Bom dia pessoal.
Estou desenvolvendo um sistema para um trabalho da faculdade usando hibernate e estou com o seguinte problema: preciso validar se um usuário esta vinculado a algum outro cadastro do sistema, caso ele esteja, não posso deixar excluir.
Atualmente ao tentar excluir, se existir vinculo com outros cadastros, está me retornando um ConstraintViolationException. Tentei tratar este erro usando um try/catch, mas não funcionou, continua retornando esta exceção e não faz o que deveria fazer no bloco catch. Além disso, também gera um SQLServerException, que eu já tentei tratar, mas não funcionou.
Como meu conhecimento sobre o Hibernate é muito limitado, não sei como tratar esta situação.
Alguém tem alguma sugestão de como eu poderia resolver está situação sem precisar verificar manualmente se o usuário está vinculado a algum cadastro?

Obrigada

7 Respostas

ddduran

o que você estava tentando fazer era o correto mesmo…
você deve tratar num catch e retornar ao usuario por exemplo a mensagem “Usuaria não pode ser execluido por que está associado a outra cadastro”.

qual o problema que você está tendo no catch?
como você o implementou?

K

Estou fazendo como você disse, mandando mostrar uma mensagem para o usuário, só que durante a execução do programa, nunca entra no catch, ou seja, sempre retorna a exceção, mas nunca entra no catch.

No DAO, está assim:

public void deleteUsuario(Usuario usu) throws ConstraintViolationException{
       EntityTransaction et = em.getTransaction();
       et.begin();
       em.remove();
       et.commit();
}

No action, está assim:

...
try{
       DAOFactory.getInstance().getUsuarioDAO().deleteUsuario(usuario);
}catch(ConstraintViolationException e){
       JOptionPane.showMessageDialog(this, "Não é possível excluir este usuário.","Aviso",JOptionPane.INFORMATION_MESSAGE);
...
ddduran

As vezes não é a ConstraintViolationException necessariamente que está sendo disparada e sim uma outra e essa apenas está sendo mostrada (printada?) ou apendada a outra

para testar troca a declaração do seu metodo para

public void deleteUsuario(Usuario usu) throws Exception

ai identifique corretamente qual é a excessão disparada

por que se fosse ConstraintViolationException certamente teria entrado no catch

K

Ainda é gerada a exceção que eu citei anteriormente, mas agora pelo menos mostra a mensagem para usuário.

Obrigada ddduran

ddduran

tem certeza? no teu catch coloca o seguinte codigo

System.out.println(e.getClass());
e ve que classe que mostra

K

Ok, mais tarde vou tentar fazer, pois agora tenho que voltar a trabalhar.
Obrigada.

K

ddduran:
tem certeza? no teu catch coloca o seguinte codigo

System.out.println(e.getClass());
e ve que classe que mostra

Este código me retornou o seguinte: class javax.persistence.RollbackException

Criado 12 de novembro de 2007
Ultima resposta 12 de nov. de 2007
Respostas 7
Participantes 2