Отображение компонентов гибернации в отдельную таблицу - PullRequest
7 голосов
/ 14 сентября 2009

Можно ли настроить Hibernate для хранения класса компонента в отдельной таблице?

Возьмите следующий пример:

<class name="test.ClassA">
   <property name="propA"/>
   <component name="componentProp" class="test.ClassB">
      <property name="propB"/>
   </component>
</class>

Отображается в таблицу с именем MyClass с двумя столбцами propA и propB. Я хочу сопоставить свойства компонента с таблицей с именем ClassB.

То, что я не хочу сделать, это настроить ClassB как саму сущность (у нее нет значимой идентичности за пределами ClassA), так что исключается нормальная связь. Кроме того, я не могу изменить объектную модель (это сгенерированный код), поэтому я не могу ввести свойство ID для ClassB.

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

Мое обоснование для этого заключается в том, что я хочу, чтобы моя схема БД напоминала объектную модель настолько близко, насколько это практически возможно, и включает в себя отдельные таблицы для компонента ClassB. Я понимаю, что это не будет масштабироваться - вы не могли бы, например, создавать вложенные компоненты, но это не проблема в данной конкретной ситуации.

1 Ответ

7 голосов
/ 14 сентября 2009

Вы можете использовать <join> и <component> вместе, или я неправильно понял ваш вопрос?

<class name="test.ClassA">
  <property name="propA"/>

  <join table="ClassB">
    <key column="ClassA_id" />
    <component name="componentProp" class="test.ClassB">
      <property name="propB"/>
    </component>
  </join>

</class>

Хотя вам (очевидно) нужен внешний ключ, его не обязательно отображать в объектной модели. Подробности о присоединении здесь - предоставлены только для полноты, я знаю вы знаете, где их получить: -)

Документация по вышеуказанной ссылке явно не говорит ничего о сопоставлении компонентов в соединениях, но DTD разрешает это, и у меня это работало в 3.1, так что я уверен, что оно все еще работает нормально Не знаю, как (или возможно ли это) отобразить это с помощью аннотаций.

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