Отображение несуществующего столбца в Nhibernate - PullRequest
1 голос
/ 06 марта 2011

Я работаю с устаревшей базой данных Oracle и пытаюсь сопоставить отношения с двумя таблицами. К сожалению, компания, которая разработала базу данных, использовала составные ключи.

У меня есть таблица (ORDERS) с первичным ключом, состоящим из 3 полей: номер заказа (номер), версия и компания.

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="BpSalesOrders.Domain"
                   namespace="BpSalesOrders.Domain">
  <class name="Order" table="OCSAORH" mutable="false" where="OCHAMND = 0">
    <cache usage="read-only"/>
    <composite-id>
      <key-property name="Number" column="OCHORDN" type="String" length="10"></key-property>
      <key-property name="Ver" column="OCHAMND" type="Int32"></key-property>
      <key-property name="Company" column="OCHCOSC" type="String" length="5"></key-property>
    </composite-id>
    <property name="Reference" column="OCHOCNO" type="String" length="25"></property>
    <property name="Date" column="OCHOCDT" type="Int32"></property>
    <property name="Status" column="OCHSTA1" type="Char"></property>
    <property name="LineOfCreditStatus" column="OCHSTA4" type="Char"></property>
    <property name="WareHouse" column="OCHRESP" type="String"></property>
    <set name="OrderLines" access="field.pascalcase-underscore" inverse="true" lazy="true" mutable="false">
      <key>
        <column name="OCLORDN" not-null="true"/>
        <column name="OCLAMND" not-null="true" default="0"/>
        <column name="OCLCOSC" not-null="true"/>
      </key>
      <one-to-many class="OrderLine" not-found ="ignore"/>
    </set>
    <set name="OrderReleases" access="field.pascalcase-underscore" inverse="true" lazy="true" mutable="false">
      <key>
        <column name="ORLORDINE" not-null="true" />
        <column name="ORLSOCIETA" not-null="true"/>
      </key>
      <one-to-many class="OrderRelease" not-found ="ignore"/>
    </set>
  </class>
</hibernate-mapping>

Существует связь с OrderLines, которая работает нормально, потому что эта таблица имеет точно такую ​​же структуру ключей. У меня проблема с отношением OrderReleases. Эта таблица имеет первичный ключ, состоящий из OrderNumber, Company и date. Здесь нет версии:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                     assembly="BpSalesOrders.Domain"
                     namespace="BpSalesOrders.Domain">
  <class name="OrderRelease" table="OCBPORDRIL" mutable="true">
    <composite-id>
      <key-property name="Company" column="ORLSOCIETA" type ="String" length="5"></key-property>
      <key-property name="OrderNumber" column="ORLORDINE" type ="String" length="10"></key-property>
      <key-property name="RequestDate" column="ORLDATARICHIESTA" type ="Int32"></key-property>
    </composite-id>
    <property name="Status" column="ORLSTATUS" type="Char" length="1"></property>
    <property name="StatusMessage" column="ORLSEGNALAZIONE" type="String" length="90"></property>
    <property name="ProcessingDate" column="ORLDATAELABORA" type ="Int32"></property>
  </class>
</hibernate-mapping>

Учитывая, что это отношение один ко многим, я хотел бы присоединиться к таблице Orders и OrderRelease для OrderNumber и Company. Если я пытаюсь это сделать (как в примере), то nHibernate выдает исключение, сообщающее, что ключ, который он пытается отобразить, состоит из 3 полей.

Есть ли способ создать несуществующий столбец, который не будет сохранен, чтобы я мог настроить отображение и отношения?

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 05 августа 2011

Закончилось создание представления с поддельным столбцом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...