这可能非常简单,但我现在无法看到木头的树木。
为了简洁起见,我想建模一个单词对象,它有相关的单词(同义词),这样做我可以有以下映射:
<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
但是我想知道是否可以在一个单词对象的实例上映射一包对象...如果这是有意义的,那么我可以像这样访问相关的单词:
word.Words
我试过玩地图元素和复合元素,但都无济于事 - 所以我想知道某个善良的人是否可以指出我正确的方向?
TA, kmoo01
答案 0 :(得分:1)
这会将 Word 实体与单词集合(同义词)映射:
<class name="Word">
<id ...>
<generator .../>
</id>
<set name="Synonyms" cascade="all">
<key />
<many-to-many class="Word" />
</set>
</class>
您可以根据需要自定义class
和set
元素中的表名称以及key
和many-to-many
元素中的列名称。
请注意,我使用了set
而不是bag
,因为它更符合语义。您可以将其映射到ICollection<Word>
或Iesi.Collections.Generic.ISet<Word>
。