2009-06-18 99 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>