Você precisa desfazer a associacão bidirecional entre o lado 1 do relacionamento, e o lado N. Exemplo:
class Noticia {
Set fotos;
void addFoto(Foto foto) {
fotos.add( foto );
foto.setNoticia( this );
}
}
Assim é feita a associacão bidirecional. Antes de remover a instancia de Foto, eu preciso desfazer essa associacão - remove() na Collection, e setNoticia( null ) na class Foto - para que o Hibernate consiga efetuar o Cascade…
Posso estar enganado, não manjo muito de hibernate, mas verifique as suas associacões…
Ok, setei o campo “SET” para nullo e funcionou em partes.
Não deu a exception, mas o hibernate não excluiu o filho, ele deu um update do campo para nullo :shock:
Alguém sabe porque o hibernate atualiza o registro para nullo ao invés de deleta-lo ? Qual configuração esta errada ?
No mapeamento, as propriedades “nullable” e “updatable” ajudam a definir esse comportamente. Se algo é ‘nullable’, não é campo obrigatório (not null) em banco. Se uma relacão não for ‘updatable’ (updatable=false) no mapeamento, o Hibernate não vai executar updates para ela.
No teu caso, o cascade type ALL servirá… Junto com o tratamento do relacionamento no lado Java (bidirecional ou unidirecional, como queira), e o correto mapeamento em xml para refletir o relacionamento em banco.
Pois é, já tentei de tudo … a documentação do hibernate é meia boca, não encontrei nada sobre esse erro…
O problema destes frameworks é esse… quando da estes “erros alienigenas” a gente perde muito tempo para fazer coisas básicas.
Com JDBC já teria resolvido faz tempo …