Deletar em cascata com Hibernate[RESOLVIDO]

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?

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

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.

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”.

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

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).

Então vou usar o cascade do BANCO mesmo.