Sobes.tech
Назад к вопросам
Senior
6

Могут ли Entity-сущности наследоваться? Как происходит маппинг в БД?

Компании, где спрашивали
SSP Soft

Ответ от нейросети

sobes.tech AI

Да, Entity-сущности в JPA/Hibernate могут наследоваться. Существует несколько стратегий маппинга наследования на таблицы в базе данных:

  1. Single Table (Одна таблица на всю иерархию)

    • Все классы наследников и базовый класс хранятся в одной таблице.
    • Используется специальный столбец discriminator для определения типа сущности.
    • Плюс: простая структура, высокая производительность.
    • Минус: много nullable колонок.
  2. Joined (Соединённые таблицы)

    • Для каждого класса создаётся своя таблица.
    • Таблицы связаны по первичному ключу.
    • Плюс: нормализованная структура.
    • Минус: сложные join-запросы.
  3. 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 { ... }

Таким образом, наследование в сущностях позволяет моделировать объектно-ориентированную иерархию, а стратегия маппинга определяет, как эти данные будут храниться в реляционной базе.