Отображение наследования классов в таблицах БД

По умолчанию JPA использует SINGLE_TABLE: одна таблица для всей иерархии с полями attr1–attr4, идентификатором и discriminator. Для корректной модели также нужен @Id у корня.

Короткий ответ

Что ответить на собеседовании

По умолчанию JPA использует SINGLE_TABLE: одна таблица для всей иерархии с полями attr1–attr4, идентификатором и discriminator. Для корректной модели также нужен @Id у корня.

Подробный разбор

Ответ с пояснениями

Условие

В системе присутствует иерархия сущностей, отмеченных аннотацией @Entity. Нужно определить, какие таблицы будет сформировать база данных при применении стратегии наследования, используемой по умолчанию в JPA. Какие именно таблицы и столбцы появятся? Как реализуется механизм наследования по умолчанию? Затем изменить стратегию наследования и описать различия между вариантами.

@Entity
class User { int attr1; /* ... */ }

@Entity
class Customer extends User { int attr2; /* ... */ }

@Entity
class Employee extends User { int attr3; /* ... */ }

@Entity
class Admin extends Employee { int attr4; /* ... */ }

Ответ

По умолчанию JPA использует SINGLE_TABLE: одна таблица для всей иерархии с полями attr1–attr4, идентификатором и discriminator. Для корректной модели также нужен @Id у корня.

Схематично SINGLE_TABLE хранит подтипы в одной строке, ненужные поля подтипов остаются NULL. JOINED создаёт User(id,attr1), Customer(id,attr2), Employee(id,attr3), Admin(id,attr4); чтение Admin соединяет его с Employee и User. TABLE_PER_CLASS хранит отдельные таблицы конкретных типов с унаследованными полями, например Admin(id,attr1,attr3,attr4). Стратегию задают @Inheritance на User. Фактические имена зависят от mapping и naming strategy; таблицы создаются лишь при включённой генерации схемы или миграции.

Источник: jakarta.ee, jakarta.ee.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее