Eu estou com o seguinte problema: tenho um mapemaneo many-to many entre Filme e Pessoa, que gera a relação associativa Direcao que tem como chave-primeira a composição das chaves estrangeiras idFilme e idPessoa.
O mapeamento funcionou perfeitamente, o Hibernate executou os comandos DDL com exatidão, todas as restrições estão adequadas.
No entanto, quando executo o comando this.session.delete( filme ) ocorre um erro: o framework não exclui os dados da relação Direcao (relação associativa) e parte direto para a exclusão do filme causando um erro de quebra de restrição, e quando coloco o atributo cascade=“delete-orphan” ou cascade=“delete” ou cascade=“all-delete-orphan” ele primeiro executa a atualização de outro relacionamento um para muitos que o filme possui com elenco, que está relacionado com pessoa, atribuindo o valor null para o idPessoa do elenco: UPDATE Elenco set idPessoa=null WHERE idPessoa=?. O que também gera um erro.
Só para deixar claro o meu contexto:
Pessoa possui um relacionamento 1:N com Elenco.
Filme possui um relacionamento 1:N com Elenco.
Filme possui um relacionamento N:M com Pessoa (gerando a relação associativa Direcao)
Se alguém puder me ajudar com isso seria muito grato. Só para deixar claro os mapeamentos estão funcionando, só ocorre erro quando excluo um filme. Porém, acredito que deve estar faltando algum atributo no mapeamento.
Então, como você já falou, alterar esse mapeamento para one-to-many resolve o problema, e foi exatamente o que fiz ontem depois que não aguentava mais ler e me valer do método impírico para tentar uma solução com many-to-many.
Mas ainda não estou satisfeito com a solução, acredito que o framework deve ter algum recurso para ser utilizado com mapeamento com essa cardinalidade.
O que mais me deixa intrigado é que o hibernate executa um update (da maneira que descrevi no primeiro item) atualizando elenco atribuindo null ao idPessoa, e o pior que isso é causado somente quando coloco o valor ( delete | delete-orphan | all-delete-orphan | all ) no cascade do mapeamento many-to-many - isso está fazendo com que quando se exclua um filme também se exclua as pessoas relacionadas com ele ao invés de excluir o relacionemento entre esses dois (o elenco do filme).
Eu também tentei excluir pessoa por pessoa, mas não obtive sucesso também.
Bom, tomara que consigamos encontrar alguma solução.