Hibernate - Excluindo filhos durante update

Seguinte pessoal, eu tenho uma estrutura de cascata de objetos, entretanto, no momento em que salvo, sempre salvo todo o objeto.

Agora, tem como, no momento do update, se eu tiver tirado algum filho de uma collection o hibernate excluí-lo para mim???

Aparentemente ele não percebe isso!!

Obs.: putz, como escrever isso claramente???

Valeu

tente usar o cascade=“all-delete-orphan”

Entretanto, o problema não são os orfãos… Eu sabia q não ia conseguir explicar claramente… Mas pense no seguinte… Pode ser uma nota fiscal, por exemplo, eu tenho o cabecalho da nota e os filhos que são os itens do mesmo. Mas no meu programa ele salva sempre a nota. Então se e excluo um filho, ao salvar a nota ele precisa excluir esse filho do bd.

Ps.: entretanto eu não posso fazer com q n momento que ele exclui o filho na tela, ele seja excluido no banco. Pois a nota só pode ser salva ser estiver válida com algumas regras. E supomos, que uma dessas seja o total da nota deve ser igual ao total dos filhos (isso é apenas um exemplo). Então um filho é excluído, mas isso não ocorre no banco realmente, pois antes de salvar, o usuário irá atualizar o valor do outro item para que os totais fechem e só então que ele salvará a nota. Nesse momento, eu gostaria de saber se há alguma maneira do hibernate saber que aquele filho que não está mais no objeto da nota deve ser excluído do bd??

Valeu

dae Rodrigo,

chegou a uma conclusão?

talvez possa implementar a interface Validatable, nao sei se vai servir neste seu caso.

vc nao pode chamar o session.delete() no filho?

e eu ainda nao entendi pq o cascade=“all-delete-orphan” nao resolve. Se vc tirar um filho da collecion este cascade vai deletá-lo do banco. Vc disse que precisa fazer validações, nao pode tirar da collection somente depois que validar? por isso eu lembrei da interface Validatable tambem…

Coloca seus *.hbm.xml para eu dar uma olhada, ai vou entender melhor.

Beleza, Ricardo…

Pois é, tu tens certeza, que com essa opção no cascade funciona??? eu testei aqui e aparentemente não funcionou… Mas vou fazer um teste melhor. É que pelo que tinha entendido na documentação, eu teria de excluir o filho na mão… Mas vou fazer um teste melhor…

Vou ficar te devendo os hbm, (pq para montar o cenário completo, ia precisar de uns 30, hehehe) mas vou ver se seleciono uns três para dar uma idéia…

Valeu o auxílio e pode deixar que eu posto aqui os resultados (só que vai ter q ficar pra amanhã)

Ahh, agora me lembrei eu não vou poder excluir com delete o filho direto, pois a exclusão não é feita no momento. o que ocorre é q o usuário faz toda a manutenção dos objetos e só salva depois. Nesse caso ele pode excluir um filho,inserir mais dois e só depois que tudo é salvo de uma vez só… Isso é feito para não existirem estrutura inválidas (por exemplo, uma nota sem nenhum item, ou o usuário completa o cadastro ou desiste no meio)

Bom, valeu pela ajuda, mais uma vez !!!

Fallow

Sim. Basta fazer isto e o filho é excluido. Nao precisa excluir o filho manualmente.

parent.getChildren().remove(child);