publicclassPessoa{//...outros fields...@OneToOneprivateEnderecoendereco//getters and setterspublicEnderecogetEndere(){returnthis.endereco;}publicvoidsetEndereco(Enderecoendereco){this.endereco=endereco}@PreRemovepublicvoidesteMetodoPodeTerQualquerNomeDesdeQueEstejaComAAnotacao(){if(this.getEndereco()!=null)thrownewRuntimeException("Não é possivel apagar esta pessoa, pois ela tem um endereco");//vc pode fazer o que kizer aqui, ele vai executar isto sempre antes de executar um Delete para a entidade Pessoa}}
vc só pode ter 1 método com essa anotação... e ela sera executada sempre antes de deletar
.........
vc pode ter 1 método para cada uma das anotações, essa anotações funcionam como gatilho, ou seja... elas são verificadas, no momento previsto pela anotação, servem tanto para validar a entidade, como para designar ações antes ou após ações com as entidades
vc só pode ter 1 anotação de cada uma desta em sua entidade... porem o método que tem essa anotação, pode chamar varios outros métodos dentro da entidade, dando marge a muitas ações que podem ser feitas antes ou apos estas operações...
J
javahp
Olá, amigo.
Obrigado por responder, mas infelizmente testei aqui e não consegui fazer funcionar. Coloquei na minha entidade o @PreRemove, e fiz o debug, e infelizmente não chamou o metódo. :?
Posso estar fazendo algo de errado. Alguma outra sugestão?
Obrigado.
roassunca
Olá javahp.
Se você estiver utilizando arquivos XML para fazer o mapeamento O-R, você pode configurar cascade=“save-update” na sua coleção (por exemplo, set):
Dessa forma, o Hibernate vai atualizar (insert/update) a tabela Endereco apenas quando você estiver salvando ou atualizando uma Pessoa.
Quando você fizer um delete de Pessoa ele não vai propagar para Endereco e o banco de dados irá gerar um erro, pois Endereco irá ter uma foreign key para Pessoa.
Essa não é a melho solução, pois irá deixar que o banco de dados gere um erro, quando uma melhor solução seria se a aplicação ou o Hibernate fizesse essa verificação antes, mas também estou aprendendo hibernate, então se alguém souber de uma solução melhor…