Hibernate: Como fazer Hibernate excluir registros da tabela filho ao excluir pai se a criança está ligada ao pai com muitos-para-um?

StackOverflow https://stackoverflow.com/questions/360026

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.

Foi útil?

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)

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top