Встраиваемый абстрактный класс с JPA (+Hibernate)

Я пытаюсь реализовать эту модель JPA:

  • Учебный класс Owner является Entity, Она имеет @Embedded экземпляр класса AbstractParent,
  • Учебный класс AbstractParent является @Embeddable, Это абстрактный класс, и у этого класса два ребенка. Дети - это конкретные классы.

Исключение составляет: Cannot instantiate abstract class or interface: AbstractParent

Кажется, что (1) мне нужно наследование компонентов, но (2) наследование компонентов не разрешено в JPA и (3) оно не было реализовано в Hibernate. Не могли бы вы подтвердить, что (1), (2) и (3) являются правильными? Если они правильные, не могли бы вы дать какой-либо совет или обходной путь? Я использую hibernate-jpa 2.0, hibernate-core 3.5.1, hibernate-core-annotations 3.2.0

2 ответа

Чтобы ответить на вопросы, почему может понадобиться такая реализация: вот пример. Таблица базы данных содержит информацию о компьютерах, на компьютерах есть мониторы, если монитор ЖК-дисплея, то его параметр равен "пикселям". Если монитор - телевизор, тогда его параметр - "линии". Все мониторы также имеют параметр "вес". Структура данных этой таблицы включает в себя: id, RAM, monitor_indicator, вес, строки, пиксели.

Эта структура данных может быть реализована в классах:

  • Учебный класс Computer {id, RAM, display}
    • Имеется информация о компьютерах.
  • Абстрактный класс AbstractDisplay {вес}
    • Он имеет общую информацию о дисплеях.
  • Учебный класс LCDDisplay {пиксели} наследуют класс AbstractDisplay
    • у этого есть специфическая информация LCD (пиксели).
  • Учебный класс TVDisplay {lines} наследует класс AbstractDisplay
    • у него есть информация для телевидения (линии).

Основная идея заключается в том, что основной класс (Владелец / Компьютер) встраивает другой класс (Parent/AbstractDisplay), который может иметь различный набор параметров в зависимости от типа встроенного класса.

Относительно того, как может быть создан экземпляр встроенного абстрактного класса: точно так же, как теперь создается экземпляр абстрактного класса в JPA: в приведенном выше примере "monitor_indicator" указывает дочерний класс, который должен использоваться, это поле должно существовать во время создания экземпляра класса Computer.

Встраивание Abstract класс не имеет никакого логического смысла, его нельзя создать, если он Abstract, Вам нужно переработать логику того, почему вы считаете нужным Abstract класс, а не конкретная реализация.

Другие вопросы по тегам