Назад к вопросам
Senior
6
Могут ли Entity-сущности наследоваться? Как происходит маппинг в БД?
Компании, где спрашивали
SSP Soft
Ответ от нейросети
sobes.tech AI
Да, Entity-сущности в JPA/Hibernate могут наследоваться. Существует несколько стратегий маппинга наследования на таблицы в базе данных:
-
Single Table (Одна таблица на всю иерархию)
- Все классы наследников и базовый класс хранятся в одной таблице.
- Используется специальный столбец discriminator для определения типа сущности.
- Плюс: простая структура, высокая производительность.
- Минус: много nullable колонок.
-
Joined (Соединённые таблицы)
- Для каждого класса создаётся своя таблица.
- Таблицы связаны по первичному ключу.
- Плюс: нормализованная структура.
- Минус: сложные join-запросы.
-
Table Per Class (Таблица на класс)
- Каждому классу соответствует своя таблица с полями базового класса.
- Нет объединения таблиц.
- Минус: дублирование данных, сложность запросов.
Пример аннотации для Single Table:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Vehicle { ... }
@Entity
@DiscriminatorValue("car")
public class Car extends Vehicle { ... }
Таким образом, наследование в сущностях позволяет моделировать объектно-ориентированную иерархию, а стратегия маппинга определяет, как эти данные будут храниться в реляционной базе.