Возможно, вы захотите перечитать Javadoc на InheritanceType
.
JOINED
Стратегия, в которой поля, специфичные для подкласса, сопоставляются с отдельной таблицей, а не с полями, общими для родительского класса, и выполняется соединение для создания экземпляра подкласса. SINGLE_TABLE
Одна таблица для иерархии классов TABLE_PER_CLASS
Таблица для каждого конкретного класса сущностей
То, что вы описываете, поскольку ваши ожидания более точно совпадают с JOINED
.В этом случае атрибуты для суперкласса будут храниться в его собственной таблице, тогда как атрибуты дочернего класса хранятся отдельно в его собственной таблице.Чтобы получить доступ к полной строке, поставщик JPA должен выполнить JOIN во всех таблицах, которые участвуют, чтобы получить полную строку.
В сценарии TABLE_PER_CLASS
будет таблицадля каждого конкретного типа сущности, в вашем случае один для User
, RegisteredUser
и UnregisteredUser
, потому что все 3 являются @Entity
отображениями.Поставщик JPA рассматривает их как отдельные сущности, но позволяет при необходимости использовать полиморфизм для отображений сущностей.
На уровне базы данных, если вы посмотрите на таблицы, вы заметите, что столбцы, унаследованные от User
, являютсятакже присутствует в двух других типах.При создании типа подкласса RegisteredUser
его свойство userName
будет сохранено в таблице RegisteredUser
, а не в таблице User
.
Только если вы создадите User
, непосредственно будетданные хранятся в User
.