Olá a todos, tenho as classes Cidade e Pessoa, onde tenho uma pessoa que mora em uma cidade e que na cidade pode haver várias pessoas?Como posso estar lançando alguma exceção se quiser deletar uma cidade, mas nesta cidade há pessoas cadastradas?
Amigo,
Existem algumas maneiras de se fazer isso.
A primeira dela e mais direta seria antes de você deletar, pesquisar se existe alguma cidade com alguma pessoa e caso exista você lança uma exceção do tipo BusinessException (criada por você, claro).
A segunda maneira é, se o seu banco utiliza integridade relacional, quando você tentar apagar o banco não irá deixar, e o Hibernate irá lançar uma exceção: ConstraintViolationException (ou algo parecido). Então é só você capturar e dizer que não é possível apagar a cidade.
Só um detalhe sobre está última opção, como o Hibernate não faz os inserts e updates na hora que você “manda”, ele deixa tudo para o final, se você tiver códigos depois do método save, chame o flush, por exemplo:
session.save(pessoa);
session.flush();
catch (ConstraintViolationException c) {
// Aqui você pode lançar outra exception, ou sei lá o que.. rsrsrs
Abraços.
Bom a segunda não deu, porque permitiu eu apagar!!E a segunda como poderia estar fazendo?
Claro, verificando se há uma pessoa cadastrada na cidade selecionada!!
Uma coisa que percebi em relação a exclusão.
Se eu tentar excluir um registro que já foi excluído ou que não existe, o Hibernate me retorna um HibernateException e não uma exception mais especialidade facilitando a identificação do ocorrido.
Vi que é apenas verificar se a coleção está vazia ou não!!Muito simples!!Dai, proibindo a exclusão!!