2009-06-18 184 views
1

我有一個組。該組可以包含組,這需要用NHibernate進行映射。我之前完成了這個工作,但是這次我得到了一個現有的數據庫,它並沒有真正存儲我喜歡的數據。NHibernate的親子樹層次結構

數據庫看起來是這樣的:

標識

Groups_Link

的ParentId childID的

我不知道如何映射這個線索?

編輯:

好像它並不那麼容易。一個小組可以作爲一個孩子存在於多個小組中。所以我認爲它應該是一個多對多的關聯。那麼,還沒有弄清楚如何做到這一點。任何提示將非常感激!

編輯:

我認爲意見可以幫我解決這個問題,但似乎有上插入,更新一些限制和享有,使得它很難刪除。

回答

0

我映射了類似的結構,如:

<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" /> 

編輯

我走在黑暗中總注射現在,因爲你的模式是不是我用的東西,現在我明白了爲什麼你問這個:-)無論如何這是一個想法。請讓我們知道,如果這個工作,如果你找到另一個解決方案:

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

我可能有關係的倒退,但至少會讓你的父母。

+0

但是這並不能解決Groups_Link表的問題。只有在組表中包含ParentId時,您的映射才能正常工作?或者更多的是我錯過了最後一對多的對話? – nandarya 2009-06-18 11:41:34

0

正如你所說,這只是一個多對多碰巧在連接的兩邊都有相同的類。 所以:

<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>