【问题标题】:nHibernate Self Join MappingnHibernate 自联接映射
【发布时间】:2011-02-18 01:19:15
【问题描述】:

这可能非常简单,但我现在看不到树木。

为简洁起见,我想为一个单词对象建模,它具有与之相关的单词(同义词),这样做我可以有以下映射:

<class name="Word" table="bs_word">
<id name="Id" column="WordId" type="Int32" unsaved-value="-1">
  <generator class="native">
    <param name="sequence"></param>
  </generator>
</id>

<property name="Key" column="word" type="String" length="50" />
<many-to-one name="SynonymGroup" class="BS.Core.Domain.Synonym, BS.Core" column="SynonymId"  lazy="false"/>


<class name="Synonym" table="bs_Synonym">
<id name="Id" column="SynonymId" type="Int32" unsaved-value="-1">
  <generator class="native">
    <param name="sequence"></param>
  </generator>
</id>
<property name="Alias" column="Alias" type="String" length="50" />
<bag name="Words" cascade="none" lazy="false" inverse="true">
  <key column="SynonymId" />
  <one-to-many class="Word"  />
</bag>

像这样映射它意味着对于给定的单词,我可以像这样访问相关的单词(同义词):

word.SynonymGroup.Words

但是我想知道是否可以将一袋对象映射到一个单词对象的实例上……如果这有意义,那么我可以像这样访问相关单词:

单词.单词

我尝试过使用地图元素和复合元素,但都无济于事 - 所以我想知道是否有好心人可以为我指明正确的方向?

ta, kmoo01

【问题讨论】:

    标签: nhibernate join mapping self synonym


    【解决方案1】:

    这将映射一个 Word 实体与一组单词(同义词):

    <class name="Word">
      <id ...>
        <generator .../>
      </id>
      <set name="Synonyms" cascade="all">
        <key />
        <many-to-many class="Word" />
      </set>
    </class>
    

    您可以根据需要自定义classset 元素中的表名,以及keymany-to-many 元素中的列名。

    请注意,我使用了set 而不是bag,因为它更符合语义。您可以将其映射到 ICollection&lt;Word&gt;Iesi.Collections.Generic.ISet&lt;Word&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多