Junior — Middle
67
Можешь рассказать о различных подходах к наследованию, используемых в JPA для моделирования связей между сущностями?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В JPA для моделирования наследования между сущностями используются три основных подхода, которые определяются с помощью аннотации @Inheritance:
-
SINGLE_TABLE (Одна таблица)
- Все классы наследников хранятся в одной таблице.
- Используется дополнительный столбец-дискриминатор для определения типа сущности.
- Плюс: высокая производительность запросов.
- Минус: много nullable столбцов, если классы сильно различаются.
-
JOINED (Соединение таблиц)
- Для каждого класса создается своя таблица.
- Таблицы связаны через JOIN по первичному ключу.
- Плюс: нормализованная структура, меньше дублирования.
- Минус: более сложные и медленные запросы из-за 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 { ... }
@Entity
@DiscriminatorValue("TRUCK")
public class Truck extends Vehicle { ... }
Выбор подхода зависит от требований к производительности, структуре данных и удобству поддержки.