Junior — Middle
89
Kun je praten over de verschillende benaderingen van erfelijkheid die in JPA worden gebruikt om relaties tussen entiteiten te modelleren?
Bedrijven waar gevraagd werd
Antwoord van AI
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 { ... }
Выбор подхода зависит от требований к производительности, структуре данных и удобству поддержки.