NHibernate - 映射连接表&反向引用

时间:2010-12-27 18:29:54

标签: nhibernate many-to-many

嘿 我必须映射以下实体:

class Document
{
   public int DocumentId { get; set; }
   public DocumentList ContainingList { get; set; }
}

class DocumentList
{
   public int DocumentListId { get; set; }
   public DateTime LastUpdateTime { get; set; }
   public IList<Doucment> Documents { get; set; }
}

约束条件是只有一个 DocumentList可以拥有一个特定的文档(尽管这里存在一个集合表)。

映射必须依赖于以下表格(为简单起见,这些表格无法更改):

TB_DOC
------
DOC_ID (int, PK)
DOC_CONTENT (blob)

TB_DOC_LIST
-----------
DOC_LIST_ID (int, PK)
DOC_LIST_UPDATE_TIME (datetime)

TB_LIST_AND_DOCS
----------------
DOC_LIST_ID
DOC_ID

所以我认为的映射是这样的:

enter code here

<class name="DocumentList" table="TB_DOC_LIST">
  <id name="DocumentListId">
    <column name="DOC_LIST_ID"/>
    <generator class="assigned" />
  </id>
  <property name="LastUpdateTime" column="DOC_LIST_UPDATE_TIME ">
  <set name="Documents" table="TB_LIST_AND_DOCS">
    <key column="DOC_ID"></key>
    <one-to-many class="Document" />
  </set>
 </class>

 <class name="Document" table="TB_DOC">
   <id name="DocumentId">
     <column name="DOC_ID"/>
     <generator class="assigned" />
   </id>

   [ ??? ] - property to reference the "owner" document list

 </class>

现在,按照已知的模式,我无法弄清楚如何映射从Document到DocumentList的反向链接,因为我在这里有一个“weired | one-to-many关系,被第三个表断开。 我也不希望Document对象引用IList来通过反向引用多对多来解决这个问题,因为每个Document只有一个这样的“所有者”DocumentList。 任何优雅的想法?我在这里误以为是什么?

1 个答案:

答案 0 :(得分:0)

现在无法测试它,但可以使用连接来获取引用ID。

<class name="Document" table="TB_DOC">
  <id name="DocumentId">
    <column name="DOC_ID"/>
    <generator class="assigned" />
  </id>

  <join table="TB_LIST_AND_DOCS">
    <key column="DOC_ID"/>
    <many-to-one class="DocumentList">
      <column name="DOC_LIST_ID" />
    </many-to-one>
  </join>

</class>