Как сделать наследование в Hibernate? - PullRequest
1 голос
/ 04 января 2011

У меня есть около 10 таблиц со следующей схемой

  • ID
  • Год
  • Код
  • Раздел
  • Период
  • Дата
  • Статус

Каждая таблица имеет имя data_1, data_2 и т. Д.Теперь я хочу написать отображение Hibernate для этих таблиц.Поскольку все эти таблицы имеют одну и ту же схему с разными именами, я написал файл POJO с данными в качестве суперкласса и всеми остальными 10 классами, наследующими его.

Что мне теперь делать с файлами hbm?Должен ли я написать один файл HBM для каждой таблицы?Я попробовал объединение-подкласс, но почему-то я не мог сделать это правильно.Я получаю много необъяснимых ошибок в Hibernate.

Как я могу написать отображение Hibernate в сценарии такого типа?Я начинающий пользователь Hibernate, и, пожалуйста, обратите внимание, что выбор дизайна базы данных не в моих руках.У меня есть 30 таких похожих типов иерархий.

Ответы [ 2 ]

1 голос
/ 04 января 2011

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

Проверьте документацию по спящему режиму на http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html

Насколько я понимаю, ваша стратегия - "Таблица на конкретный класс"

0 голосов
/ 04 января 2011

Прежде всего вам нужно выбрать, какую стратегию вы хотите использовать для наследования. Есть несколько вариантов.

Взгляните на эту ссылку здесь , где она немного описывает наследование в JPA. Hibernate поддерживает JPA, поэтому сопоставления должны быть одинаковыми, то есть:

Обратите внимание, что это тип отображения для EclipseLink

<entity name="Project" class="Project" access="FIELD">
  <table name="PROJECT"/>
  <inheritance strategy="JOINED"/>
  <discriminator-value>P</discriminator-value>
  <discriminator-column name="TYPE"/>
  <attributes>
     <id name="id"><column name="ID"/> </id>
  </attributes>
</entity>
<entity name="LargeProject" class="LargeProject" access="FIELD">
  <table name="L_PROJECT"/>
  <discriminator-value>L</discriminator-value>
</entity>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...