Question

Désolé si cela est dupe, n'a pas pu trouver, mais ne savait pas vraiment quoi chercher, de toute façon ...

J'ai trois classes, Parent, Child et Other

Parent a beaucoup Child où l'enfant a une colonne de Parent_Id

Other contient une référence à un Child à travers une colonne de Child_Id

Lorsque je supprime un Parent, je veux aussi supprimer tous les objets associés Child. Si ces objets Child sont référencés par toutes les classes de Other, je veux leur (les objets) Other références Child_Id à invalidés.

Quelles sont les règles en cascade ai-je besoin sur les deux relations?

En outre, les entités seront mises à jour de NHibernate en mémoire ainsi que dans la base de données?

i.e.. si j'ai un tas de Parent, Child et Other en mémoire (à savoir db chargé à partir, et non transitoire) et dire NH supprimer un Parent, ce qui se passera? Je suppose que les objets Parent et Child deviendront transitoires? Qu'est-ce qui va arriver à la propriété Child de tout objet Other?

Edit: lors de l'utilisation All-delete-orphan, quelles classes d'un objet comme un orphelin? Dans l'exemple ci-dessus, est un Child orphelin si son Parent mère est supprimé? Est-ce que la référence de la matière Other lors de l'examen d'une entité orpheline?

Merci

Était-ce utile?

La solution

NH ne met pas à jour l'un de vos entités en mémoire (à l'exception des Ids et versions). NH n'est pas responsable de gérer les relations de vous entités. Il persiste tout ce que vous avez fait dans la mémoire à la base de données.

De ce point de vue, il devrait être plus facile à comprendre.

cascade="delete" signifie que lorsque le parent est supprimé, l'enfant est supprimé aussi. des moyens de cascade="delete-orphan", qui en plus, l'enfant est même supprimé si aucune référence parent plus. Ceci, bien sûr, ne fonctionne que si l'enfant est à la session.

L'instance supprimé se transitoires en mémoire. Les références à l'instance transitoire (de Other) provoquera une exception. Autant que je sache, vous devez supprimer la référence aux instances supprimées par vous-même. Vous pouvez probablement faire implicitement par quelques trucs, mais je doute que ce sera propre. Il est logique d'affaires.

Pour les relations parent-enfant, cascade="all-delete-orphan" est approprié.

Pour référence régulière, je préfère cascade="none".

Il y a un grande explication par Ayende Rahien

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top