2009-06-18 18 views
1

Ich habe eine Gruppe. Diese Gruppe kann Gruppen enthalten, die mit NHibernate zugeordnet werden müssen. Ich habe das schon vorher gemacht, aber dieses Mal habe ich eine existierende Datenbank, die die Daten nicht wirklich speichert, so wie ich es auch möchte.Eltern-Kind-Hierarchie mit NHibernate

Die Datenbank sieht wie folgt aus:

Gruppen

Id

Groups_Link

ParentId childID

Ich habe keine Ahnung, wie diese zur Karte?

Edit:

Scheint es nicht so einfach ist. Eine Gruppe kann als Kind für mehr als eine Gruppe existieren. Es sollte also eine Viele-zu-Viele-Assoziation sein, denke ich. Nun, muss noch herausfinden, wie das geht. Irgendwelche Hinweise würden wirklich geschätzt werden!

Edit:

Ich dachte Ansichten mir das Problem lösen helfen könnten, aber es scheint einige Einschränkungen auf Einfügen, Aktualisieren zu sein und mit Blick löschen, die es schwierig macht.

Antwort

0

I kartiert eine ähnliche Struktur wie:

<class name="Folder" lazy="false"> 

    <id column="Id" name="Id"> 
     <generator class="guid"/> 
    </id> 

    <property name="Name" column="FolderText"></property> 
    <bag name="Children" cascade="all" fetch="subselect" inverse="true"> 
     <key column="ParentId" /> 
     <one-to-many class="Folder" /> 
    </bag> 

    <many-to-one class="Folder" name="Parent" column="ParentId" insert="true" /> 

bearbeiten

ich im Dunkeln jetzt insgesamt Schuss nehme da Ihr Schema nicht das, was ich verwendet habe, und ich verstehe jetzt warum hast du das gefragt :-) Wie auch immer, hier ist ein Gedanke. Bitte lassen Sie uns wissen, ob dies von gearbeitet, wenn Sie eine andere Lösung finden:

<join fetch="join" table="GroupLinks"> 
     <key column="ChildId"></key> 
     <many-to-one name="Parent" class="Folder" column="ParentId"/> 
    </join> 

Ich könnte die Beziehung nach hinten, aber dies zumindest würden Sie den Eltern bekommen.

+0

Aber das wird das Problem mit der Groups_Link-Tabelle nicht lösen. Ihr Mapping funktioniert nur, wenn Sie die ParentId in der Groups-Tabelle haben, wenn ich sie richtig verstanden habe? Oder ist es mehr bis zum letzten viel-zu-eins, das ich vermisste? – nandarya

+0

Es tut uns leid, dass Ihre Schemadarstellung nicht klar war. Ich dachte, es wäre ein Tisch – JoshBerke

+0

Ich habe noch ein paar Dinge zu beheben, bevor ich das Mapping, das Sie gepostet haben, ausprobieren kann. Wird in ungefähr drei Stunden oder so sein und ich werde das Ergebnis melden, damit Sie wissen, ob es funktionierte oder nicht. – nandarya

0

Wie Sie sagen, ist es nur eine Viele-zu-Viele, die zufällig die gleiche Klasse auf beiden Seiten der Verbindung hat. So:

<class name="G.Group, G" table="GROUPS"> 

    <id column="Id" name="Id"> 
    <generator class="guid"/> 
    </id> 

    <set name="Parents" table="Groups_Link" cascade="save-update"> 
    <key column="ChildId"/> 
    <many-to-many class="G.Group, G" column="ParentId"/> 
    </set> 

    <set name="Children" table="Groups_Link" cascade="save-update" inverse="true"> 
    <key column="ParentId" /> 
    <many-to-many class="G.Group, G" column="ChildId"/> 
    </set> 

</class>