NHibernate - отображение таблицы соединений и обратных ссылок - PullRequest
0 голосов
/ 27 декабря 2010

Эй, мне нужно отобразить следующие объекты:

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"| отношение один ко многим здесь, нарушенное третьей таблицей. Я также не хочу, чтобы объект Document ссылался на IList, чтобы решить эту проблему с помощью обратной ссылки «многие ко многим», поскольку у каждого документа есть только один такой «владелец»"DocumentList. Любая изящная идея? Что я здесь неправильно понимаю?

1 Ответ

0 голосов
/ 12 июля 2011

не могу проверить это прямо сейчас, но соединение может быть использовано для получения идентификатора ссылки.

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...