2008-12-16 9 views
1

toute aide que vous pouvez donner est très bien acceptée. J'ai regardé ce problème encore et encore et n'arrive pas à trouver la solution. . Son regardant probablement en moi dans le visage :(nhibernate, classe avec parents et enfants causant des duplicata de clés

Je la classe suivante avec une liste des parents et les enfants qui persistent dans une table Hiérarchie

class Item 
{ 
    public virtual int Id {get;set;} 
    public virtual List`<Item`> Parents {get;set;} 
    public virtual List`<Item`> Children {get;set;} 
} 

Dans les paramètres de mise en veille prolongée, j'ai:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
    assembly="Pl.Components" namespace="Pl.Components"`> 
    <class name="Pl.Components.Item, Pl.Components" table="Item"> 
     <id name="Id" type="Int32" column="Id" > 
      <generator class="identity" /> 
     </id> 
     <bag name="Parents" lazy="true" table="Hierarchy" cascade="save-update"> 
      <key column="ChildId"/> 
      <many-to-many class="Item" column="ParentId" /> 
     </bag> 
     <bag name="Children" lazy="true" table="Hierarchy" cascade="delete"> 
      <key column="ParentId"/> 
      <many-to-many class="Item" column="ChildId"/> 
     </bag`> 
    </class> 
</hibernate-mapping> 

cela provoque des clés en double dans la table hiérarchique que les paires de clés sont insérés pour l'enfant et le parent.

est-il une solution à ce o autre que la hiérarchie parent persistante et la hiérarchie enfants dans des tables séparées?

+0

Le mappage ci-dessus est l'implémentation en cours, mais cela tente d'insérer parentId en double, childId dans les insertions de table pour le parent et l'enfant. J'ai essayé différents réglages de l'attribut cascade. Sûrement il y a un moyen de modéliser sans tables séparées pour PHierachy et CHierarchy? – user46702

+0

Avez-vous essayé de spécifier un nom de clé étrangère dans les colonnes de clé? – Tigraine

+0

Merci à Jon Limjap pour le formatage du code. Je ne ferai plus la même erreur. Merci. – user46702

Répondre

Questions connexes