2009-04-27 6 views
6

Je viens de rencontrer un problème majeur avec NHibernate. J'ai 2 objets, chacun avec une collection de choses. Je dois déplacer une chose de la collection de l'objet A vers la collection de l'objet B. Je reçois une erreur à propos d'un objet supprimé car, je crois, NHibernate tente de supprimer la chose de la collection de l'objet A quand elle doit la garder Pour l'objet B. D'un point de vue DB, il s'agit simplement de mettre à jour la propriété "parent" vers le nouvel objet (objet B). Mais avec les collections, je ne suis pas vraiment sûr de ce que ...Collections NHibernate et objets en mouvement

Existe-t-il une procédure bien connue pour déplacer des objets d'une collection dans une autre dans NHibernate?

Merci d'avance pour toute aide.

Cordialement,

Eric.

+0

Comment avez-vous cartographié les collections? –

Répondre

3

Je suppose que vous utilisez Cascade dans le mappage de la classe représentée par des objets A et B, c'est-à-dire que A et B sont deux instances de quelque classe X, et que le mappage de X contient un attribut en cascade sur la collection contenant l'objet à transférer.

Étant donné cette hypothèse, cela peut aider.

Si vous voulez pouvoir transférer l'objet d'une collection à l'autre, vous devez déterminer si la chose déplacée doit avoir une existence indépendante des deux collections.

Si l'objet de transfert n'est pas enregistré seul, vous rencontrerez des problèmes lors du transfert car l'objet transféré est déjà connu de la session.

Il y a deux façons dont je peux penser. Le meilleur des deux est probablement de traiter l'objet de transfert comme un objet indépendant qui est enregistré seul sur la base de données (c'est-à-dire, ne compte pas sur la cascade dans le mappage des objets avec la collection). Conceptuellement, cela a du sens parce que si vous pouvez le transférer d'une collection à l'autre, cela implique qu'il est en quelque sorte indépendant des deux objets ayant les collections. Cela signifie que vous pourriez vous retrouver avec des orphelins. Si vous souhaitez conserver l'utilisation de cascade dans les mappages, vous devrez supprimer de l'objet A dans une transaction différente de l'ajout à l'objet B. Je suppose que ce n'est pas ce que vous voulez faire.

+0

Rob, merci pour votre réponse. Nous avons fini par laisser tomber NHibernate quelques jours plus tard et pour certaines raisons, je ne me souviens pas de voir les notifications de réponses à mon fil. Merci quand même pour votre aide. –

0

Avez-vous essayé la cartographie à l'aide

cascade = "all-delete-orphan"

Questions connexes