Наследование и ассоциации в NHibernate - PullRequest
0 голосов
/ 31 августа 2009

У меня есть сущностная модель, в которой базовый класс в структуре наследования имеет связь с другим классом, и мне было интересно, будет ли сопоставляться ассоциация и для подтипов базового класса?

Для получения дополнительной информации, вот основная схема этой части системы:

Транспорт является базовым классом и связан с владельцем. Bike и Car - два подкласса.

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

Вот так у меня это отображение должно работать, я прав? Я не видел ничего такого, что решало бы эту проблему, поэтому я подумал, что это будет хороший вопрос для SO.

<class name="Transport" table="TRANSPORT">
    <id name="Id" type="Int64" column="Transport_ID">
        <generator class="native"/>
    </id>

    <many-to-one name="Owner" column="Owner_ID" /> 

    <joined-subclass name="Bike" table="BIKE">
        <key column="Bike_ID"/>
    </joined-subclass>
    <joined-subclass name="Car" table="CAR">
        <key column="Car_ID"/>
    </joined-subclass>
</class>

1 Ответ

0 голосов
/ 31 августа 2009

Я использовал hibernate только для Java, поэтому некоторые конкретные вещи могут не относиться к вашему случаю ... но я предполагаю, что это будет довольно схоже.

Все сопоставленные свойства (включая ассоциации) из суперкласса доступны в предках. Обратите внимание, что у вас могут быть суперклассы, которые не отображаются в XML или аннотированы - свойства этих суперклассов вообще не сохраняются в базе данных.

Есть одна проблема, с которой вы можете столкнуться с общими запросами (то есть запросами для типа транспорта) в сочетании с отложенной загрузкой, когда в некоторых случаях hibernate создает прокси исключительно для супертипа, который вы не можете использовать для доступа к любому свойству от предка. В противном случае все должно работать так, как вы ожидаете.

...