Sobes.tech
Senior
84

¿Pueden las entidades heredar? ¿Cómo se realiza el mapeo en la base de datos?

Empresas donde se preguntó
SSP Soft

Respuesta de la IA

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 { ... }

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