Назад к вопросам
Aston
Junior — Middle
55
Какие подходы к наследованию в маппинге объектов в Hibernate тебе известны?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В Hibernate существуют три основных подхода к наследованию при маппинге объектов на таблицы базы данных:
-
Single Table (Одна таблица на иерархию)
- Все классы наследников хранятся в одной таблице.
- Используется специальный столбец-дискриминатор для определения типа объекта.
- Плюсы: простота, высокая производительность при выборках.
- Минусы: много nullable колонок, возможна избыточность.
-
Joined (Соединённые таблицы)
- Для каждого класса создаётся своя таблица.
- Таблицы связаны по ключу (JOIN).
- Плюсы: нормализованная структура, меньше дублирования.
- Минусы: сложные запросы с JOIN, может быть медленнее.
-
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 { ... }
Выбор подхода зависит от требований к производительности и структуре данных.