MappedSuperclass, расширяющий другой MappedSuperclass - PullRequest
0 голосов
/ 10 октября 2018

В JPA / Hibernate может ли отображаемый суперкласс, такой как BetterBaseEntity, быть подклассом другого отображаемого суперкласса BaseEntity?

Я хочу сохранить BaseEntity, потому что почти все используют его, но хотели быдобавить некоторые новые родительские функции.

1 Ответ

0 голосов
/ 10 октября 2018

Реляционные базы данных не имеют простого способа сопоставить иерархии классов с таблицами базы данных.

Для решения этой проблемы в спецификации JPA предусмотрено несколько стратегий:

MappedSuperclass - родительские классы, могут'быть объектами

Одиночная таблица - объекты из разных классов с общим предком помещаются в одну таблицу

Объединенная таблица - каждый класс имеет свою таблицу, и для запроса объекта подкласса требуется присоединение ктаблицы

Table-Per-Class - все свойства класса находятся в его таблице, поэтому объединение не требуется

Каждая стратегия приводит к разной структуре базы данных.

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

Поскольку Hibernate является реализацией JPA, он содержит все вышеперечисленное, а также несколькоОсобенности, связанные с Hibernate, связанные с наследованием.

MappedSuperclass: -

При использовании стратегии MappedSuperclass наследование проявляется только в классе, но не в модели сущностей.

Начнем с создания класса Person, который будет представлять родительский класс:

@MappedSuperclass
public class Person {

    @Id
    private long personId;
    private String name;

    // constructor, getters, setters

} Обратите внимание, что у этого класса больше нет аннотации @Entity, поскольку он не будет сохранен в базе данных сам по себе.

Далее, давайте добавим подкласс Employee:

@Entity
public class MyEmployee extends Person {
    private String company;
    // constructor, getters, setters 
}

В базе данных это будет соответствовать одной таблице «MyEmployee» с тремя столбцами для объявленных и унаследованных полей подкласса.

Если мы используем эту стратегию, предки не могут содержать ассоциации с другими объектами.

Для получения более подробной информации см. -

https://ritesh -shukla.blogspot.com / 2018/10 / hibernate-наследование-mapping.html? M = 1

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