Hibernate: Como fazer Hibernate excluir registros da tabela filho ao excluir pai se a criança está ligada ao pai com muitos-para-um?
Pergunta
Vamos dizer que eu tenho duas tabelas - "criança" e "pai" com muitos-para-um relacionamento. O que eu preciso é entradas filho exclusão Se registro pai é excluído.
Não é um problema se eu ligar tabela filho de pai criando um-para-muitos associação no parent.hbm e conjunto de cascade = "all-delete-orphan".
O problema é que eu não quero relação de um-para-muitos no lado do pai, então eu criei muitos-para-um no lado da criança. A razão para isso é a tabela filho é muito grande e eu não quero extrair centenas de registros de cada vez que eu uso pai. Então meus olhares de configuração como esta:
child.hbm:
<many-to-one name="parent" class="com.example.Parent" column="parentid"/>
enquanto parent.hbm não tem associações com a criança.
A questão é:? Como fazer Hibernate excluir registros da tabela filho ao excluir um pai se uma criança está ligada a um pai com muitos-para-um
Graças.
Solução
par de opções:
-
adicionar o um-para-muitos para o pai com eliminação em cascata, mas mitigar a perda de desempenho usando o carregamento lento.
-
Hibernate Interceptor (ou um aspecto em um ambiente AOP) para detectar exclusões registro pai e crianças de exclusão.
Pessoalmente, eu seria a favor da primeira opção, pois permite que o seu modelo de dados refletem mais de perto as relações reais em seus dados.
Editar: há uma terceira opção, mas não é agradável - usar um gatilho de banco de dados e liberar o cache Hibernate (ou use uma sessão não-caching)
.