2009-06-18 14 views
1

私はグループを持っています。そのグループはグループを含むことができ、これはNHibernateにマップされる必要があります。私は前にこれをやったことがありますが、今回はデータを保存していない既存のデータベースを手に入れました。NHibernateの親子ツリー階層

データベースには、次のようになります。私はこれをマッピングする方法について見当もつかない

グループ

同上

Groups_Link

ParentIdは たchildID

編集:

それは簡単ではないように思えます。 1つのグループは、複数のグループの子として存在することができます。だから、それは私が推測する多対多関連でなければなりません。さて、これを行う方法をまだ分かっていない。どんなヒントも本当にありがとう!

編集:私は、ビューは私が問題を解決するのに役立つと考えていたが、挿入、更新にはいくつかの制限があること、それが困難にビューを削除するためにあるようです

答えて

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

ただし、これでGroup_Linkテーブルの問題は解決しません。マッピングが正常に理解できれば、グループテーブルに親のIDがある場合にのみマッピングが機能します。それとも、私が逃した最後の多対1にもっとそうですか? – nandarya

+0

ご迷惑をおかけしています。私はそれが1つのテーブルだと思った – JoshBerke

+0

私はあなたが投稿したマッピングを試すことができます前に修正するいくつかのことがまだあります。約3時間かそこらで、結果を報告して、それが効果があるかどうかを知るようにします。 – nandarya

0

あなたが言っているように、それはまったく同じクラスを結合の両側に持つ多対多です。 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> 
関連する問題