NHibernate的父子树层次结构

时间:2009-06-18 11:26:34

标签: nhibernate fluent-nhibernate

我有一个小组。该组可以包含组,这需要与NHibernate映射。我以前做过这个,但是这次我得到了一个现有的数据库,它并没有像我希望的那样真正存储数据。

数据库如下所示:

编号

Groups_Link

的ParentId childID的

我不知道如何映射这个?

修改

似乎并不那么容易。一个小组可以作为一个孩子存在于多个小组中。所以它应该是我自己的多对多关联。好吧,还没弄明白怎么做。任何提示都会非常感激!

修改

我认为观点可以帮助我解决问题,但是对于插入,更新和删除视图似乎存在一些限制,这使得难以实现。

2 个答案:

答案 0 :(得分: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>

我可能会有倒退的关系,但这至少会让你成为父母。

答案 1 :(得分: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>