Sobes.tech
Back to questions
Junior — Middle
54

Какие подходы к наследованию в маппинге объектов в Hibernate тебе известны?

Companies where asked
AstonAston

Answer from AI

sobes.tech AI

В Hibernate существуют три основных подхода к наследованию при маппинге объектов на таблицы базы данных:

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

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

    • Для каждого класса создаётся своя таблица.
    • Таблицы связаны по ключу (JOIN).
    • Плюсы: нормализованная структура, меньше дублирования.
    • Минусы: сложные запросы с JOIN, может быть медленнее.
  3. Table per Class (Таблица на класс)

    • Каждый класс имеет свою таблицу с полями всех родителей.
    • При выборке используется UNION.
    • Плюсы: простота структуры таблиц.
    • Минусы: дублирование данных, сложные запросы.

Пример аннотации для Single Table:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Animal { ... }

@Entity
@DiscriminatorValue("Dog")
public class Dog extends Animal { ... }

Выбор подхода зависит от требований к производительности и структуре данных.