1

j'ai une cartographie mise en veille prolongée suivant:enfant Supprimer les objets lorsque la référence parent est supprimé

<class name="Folder" > 
    <id name="Id"> 
     <generator class="native"/> 
    </id> 
    <many-to-one name="Owner" 
     not-null="false" fetch="select" column="OwnerFK" not-found="ignore" lazy="proxy" /> 
    <property name="Name" /> 
    <many-to-one name="ParentFolder" column="ParentId" 
     not-found="ignore" lazy="proxy" not-null="false"/> 
</class> 

colonne ParentId est référencée à la Id de la même table, de sorte que je sais à quel parent le dossier de l'enfant a été créé.

Lorsque je supprime le parent, je veux les dossiers enfants aussi à supprimer et si seul enfant est supprimée, le parent ne doit pas affectée.

J'ai essayé cascade="all" sur la colonne parentId mais j'ai supprimé mes dossiers parents lorsque je supprimais uniquement l'enfant.

Est-ce que cela peut être réalisé en utilisant Hibernate?

Répondre

1

Oui, cela peut être réalisé en utilisant Hibernate. Vous devrez changer votre cartographie un peu.

<class name="Folder" > 
    <id name="Id"> 
     <generator class="native"/> 
    </id> 
    <many-to-one name="Owner" 
     not-null="false" fetch="select" column="OwnerFK" not-found="ignore" lazy="proxy" /> 
    <property name="Name" /> 

    <many-to-one name="ParentFolder" column="ParentId" 
     not-found="ignore" lazy="proxy" not-null="false"/> 

    <bag name="ChildFolders" cascade="delete" inverse="true" fetch="select"> 
     <key column="ParentId" not-null="false"/> 
     <one-to-many class="Folder"/> 
    </bag> 
</class> 

Chaque élément peut avoir un parent et un enfant, vous aurez besoin d'un sac pour aller chercher les enfants et un grand nombre à un pour le parent.

Ainsi, lorsque vous essayez de supprimer un parent, vous avez cascade = « supprimer » présents sur vos enfants pour vous assurer qu'il n'y a pas orphelins.

0

Aucun NHibernate ne peut pas faire cela. Vous devez obtenir le modèle pour lister la structure et supprimer chaque objet lorsque vos cartes NHibernate parent non enfant.