Как управлять пустыми сущностями и / или сущностями без таблиц, используя дискриминаторы / наследование - PullRequest
0 голосов
/ 15 февраля 2012

Я спрашивал несколько раз на других сайтах (и здесь), но думаю, что попробую еще раз, потому что я действительно не нашел ответа.Я новичок в hibernate, и я боюсь публиковать сообщения на форумах hibernate.Я использую в основном аннотации JPA с Hibernate 3.6.

У меня есть следующая схема: Schema

Так что в основном это устаревшая БД.Номинация - это центральная таблица, и у меня есть 4 конкретных типа номинаций:

  1. Coworker (который использует только столбцы таблицы NOMINATION в качестве атрибутов)
  2. Команда (таблицы NOMINATION + TEAM_NOM)
  3. Идея (таблицы NOMINATION + IDEA_NOM)
  4. Успех (таблицы NOMINATION + SUCCESS_NOM)

Итак, я использовал дискриминатор (и наследование), чтобы установить ихюридические лица.Например:

Вот номинация сущностей:

  @Entity(name = "Nomination")
  @Table(name = "NOMINATION")
  @DiscriminatorColumn(name="CATEGORY_CODE", discriminatorType = DiscriminatorType.STRING, length = 1)
  @Inheritance(strategy=InheritanceType.JOINED)

  public abstract class Nomination extends AuditableEntity {

А вот как я кодирую сущности Team, Idea и Success:

  @Entity(name = "TeamNom")
  @Table(name = "TEAM_NOM")
  @DiscriminatorValue("T")
  @PrimaryKeyJoinColumn(name = "NOM_ID")

  public class TeamNom extends Nomination {

Теперь для Coworker я сделалследующее:

  @Entity(name = "CoworkerNom")
  @DiscriminatorValue("C")
  @PrimaryKeyJoinColumn(name = "NOM_ID")

  public class CoworkerNom extends Nomination {

Как видите, у меня большая проблема.Hibernate ищет таблицу под названием «CoworkerNom», но у меня ее нет в нашей БД.Я попытался вставить «Номинацию» в качестве таблицы, потому что у меня не было идей, но логически это дает мне ошибку зависимости округлости.

Итак, как мне подойти к этой сущности, у которой нет таблицы и атрибутов? Очевидно, что другие сущности работают нормально.

1 Ответ

1 голос
/ 15 февраля 2012

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

...