Deletar em cascata com Hibernate[RESOLVIDO]

6 respostas
E

Preciso saber como eu faço para ativar a exclusão em cascata com o Hibernate. Coloco o atributo cascade=“delete-orphan” nas tags dos relacionamentos, porém quando eu vou excluir um Cliente, por exemplo, aparece um erro relacionado a chave estrangeira de Compras (1xN com Cliente).

Qual é a forma correta de fazer isso para many-to-many, one-to-many e one-to-one. Estou fazendo com hbm.xml. Existe mais alguma coisa a ser feita além da tag?

6 Respostas

R

Talvez o uso de “cascade=none” possa resolver o seu problema:

http://docs.jboss.org/hibernate/stable/core/reference/en/html/collections.html#collections-mapping

E

cascade=“none” não poderia ser porque o que eu quero é exatamente o contrário: quando eu deletar um cliente, eu quero que todas as compras desse cliente sejam deletadas.

R

Ops, perdão, não li com a devida atenção da primeira vez :confused: Para cascatear as exclusões, use “cascade=all” ou “cascade=delete”.

E

Tudo bem, mas existe alguma regra para esses atributos? Eu devo colocar cascade=“all” em todos os relacionamentos, ou depende da relação?

R

Como em tantas outras coisas da Computação, não há uma regra rígida para isso, tudo depende das características da sua aplicação. Por exemplo, se o Banco de Dados já está configurado para cascatear exclusões executadas em uma determinada tabela, NÃO se deve configurar no Hibernate a exclusão em cascata para essa tabela. Eu, pessoalmente, não uso o cascade do Hibernate - prefiro fazer isso no próprio Banco (usando ON DELETE CASCADE ou triggers).

E

Então vou usar o cascade do BANCO mesmo.

Criado 1 de outubro de 2009
Ultima resposta 2 de out. de 2009
Respostas 6
Participantes 2