2009-02-25 9 views
1

Bonjour, Je rencontre un problème lors de la mise à jour des objets enfants dans le scénario suivant.Problème de cascade NHibenate

Les correspondances sont les suivantes:

Parent: Calendrier

<bag name="defaultCategories" inverse="true" lazy="false" 
    cascade="all-delete-orphan"> 
    <key column="parentID" /> 
    <one-to-many class="DefaultCategory"/> 
    </bag> 

enfant: DefaultCatergory

<class name="DefaultCategory" table="tb_calendar_default_category" lazy="false"> 

<id name="id" column="id"> 
    <generator class="hilo"/> 
</id> 

<many-to-one name="calendar" column="parentID" not-null="true" 
cascade="all-delete-orphan" /> 

code utilisé pour mettre à jour le calendrier:

public Calendar Update(Calendar vo) 
    { 
     session = NHibernateHelper.GetCurrentSession(); 

     tx = session.BeginTransaction(); 
     using (tx) 
     { 

      session.Update(vo); 

      tx.Commit(); 
     } 

     return vo; 
    } 

Le prob Lem est que lorsque j'ajoute ou supprime des defaultCategories via l'interface utilisateur et que je renvoie la version mise à jour du calendrier au backend, NHibernate renvoie le calendrier mis à jour et tout semble bien. Cependant, tous les DefaultCatergories qui auraient dû être supprimés sont conservés dans la table Catégories par défaut. Ainsi, lorsque je rafraîchis l'interface utilisateur et que je réappelais pour le calendrier, je peux voir que la collecte n'a pas changé.

Pensez-vous que je doive supprimer tous les DefaultCatergories par parentID, puis recréer? J'avais l'impression que NHibernate s'en occupait pour vous? Toute aide ou pointeurs très appréciés.

Répondre

1

Je me demande si NHibernate ne reconnaît pas le calendrier comme une instance existante. Jetez un oeil à this section de la documentation et voir si l'ajout d'un attribut non-valeur-valeur à votre cartographie aide.

+0

Merci pour cela. Je viens de le regarder et j'ai suivi les conseils d'utilisation de saveUpdate. Cependant, toujours le même problème. Cela étant, disons que j'ai 3 objets enfants, supprimer 2 et mettre à jour. Je vais toujours finir avec 3 dans la DB. Hmmm de retour à la planche à dessin. – user17510

1

Votre flushmode par défaut est OnCommit? Si ce n'est pas le cas, la vidange de la session avant la validation corrigera le problème.

Ce que vous faites devrait fonctionner.

Questions connexes