2009-06-18 9 views
0

J'utilise une combinaison de Spring 2.5.6 et d'annotations Hibernate. J'ai trois objets (tables ou w/e) à l'étude: Client, Adresse, Commande. Le client a la propriété Cascade DELETE_ORPHANS définie pour les adresses. Ce que je fais est une fusion de client, je déplace toutes les adresses et commandes d'un client à l'autre, puis place un peu désactivé sur l'ancien client. Je fais cela en supprimant les adresses de CustB et en les ajoutant à CustA. Ensuite, je sauvegarde CustA avec .update (custA), les adresses et les ordres se déplacent de manière appropriée, mais quand je mets à jour custB avec le bit désactivé, il efface mes adresses déplacées!Contournement de DELETE_ORPHANS dans une transaction lors du déplacement d'objets d'un parent vers un autre, hiberner

Lorsque je commente le DELETE_ORPHANS cela fonctionne très bien. Comment éviter que DELETE_ORPHANS ne supprime les adresses déplacées?

Ne devrais-je pas les retirer du custB et juste changer leur référence client? Si je fais tout cela dans une transaction au lieu de détacher les objets entre chaque opération, va-t-il se mettre à jour correctement avec DELETE_ORPHAN activé?

Répondre

0

J'ai trouvé ce post sur les forums de mise en veille prolongée: https://forum.hibernate.org/viewtopic.php?f=1&t=961777&start=0

Christian des discussions de l'équipe de mise en veille prolongée sur DELETE_ORPHANS comme un hack qui assure mise en veille prolongée lorsque l'associé est retiré d'un objet, il est autorisé à supprimer. Il dit de l'utiliser avec parcimonie. Fondamentalement, n'utilisez pas delete_orphans si vous pouvez l'aider.

Si vous décidez de l'utiliser, vous devrez effectuer des requêtes supplémentaires qui supprimeront les entrées, puis les recréer avec de nouveaux identifiants attachés aux nouveaux objets parents.

Questions connexes