Отношения в nHibernate с использованием простых столбцов, а не ПК - PullRequest
2 голосов
/ 05 июля 2010

У меня есть таблица T1, в которой есть следующие столбцы:

  • ID (int) - это первичный ключ
  • Ссылка (int) - (не ноль)
  • Имя (строка)

И вторая таблица T2 со столбцами:

  • T2ID (int) - это первичный ключ
  • Value1 (int)
  • Значение2 (int)
  • SomeOtherData (int)

Каждая запись из T1 имеет> 2 записи в T2: столбец Ref в T1 имеет значение из таблицы T2, столбца T2ID.

Как написать файл сопоставления для этого сценария? В настоящее время я использую это:

<class name="Class1" table="T1" >
    <id name="ID" column="ID">
        <generator class="increment"/>
    </id>
    <property name="Name"/>

        <set name="Data" inverse="true" fetch="select">
            <key>
                <column name="T2ID"/>
            </key>
            <one-to-many class="Class2"/>
        </set>
</class>

<class name="Class2" table="T2" >
    <id name="ID" column="T2ID">
        <generator class="increment"/>
    </id>
    <property name="Value1"/>
    <property name="Value2"/>
    <property name="SomeOtherData"/>
</class>

в коде у меня есть это, чтобы загрузить данные T2 для T1:

NHibernateUtil.Initialize( class1.Data );

, который генерирует этот SQL:

SELECT 
T2ID, Value1, Value2, SomeOtherData
FROM T2
WHERE T2ID = <**an ID column from T1 for which I'm loading T2 data!**>

Проблема в том, как указать nHibernate использовать значение из столбца Ref для загрузки свойства данных, а не PK?

Ура, Alex

1 Ответ

1 голос
/ 05 июля 2010

Насколько я знаю, это не поддерживается.Элемент property-ref позволяет отобразить этот тип отношений со стороны «многие», но нет эквивалента для сопоставления стороны «один».

Обходной путь - создать представлениедля T1 это включает T2ID и отображает это вместо таблицы.

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