Почему родительская таблица не обновляется новой записью при вставке записи в дочернюю таблицу (используя таблицу для стратегии класса) - PullRequest
0 голосов
/ 18 мая 2018

У меня есть родительский объект (Пользователь) и два дочерних объекта (Зарегистрированный пользователь и Незарегистрированный пользователь), и я использую стратегию TABLE PER CLASS, чтобы реализовать это в таблицах базы данных.

Поэтому у меня есть три таблицы в базе данных.Поэтому, когда пользователь регистрируется, я создаю сущность «Зарегистрированный пользователь» и сохраняю ее.Он создает запись в таблице «Зарегистрированный пользователь», но не добавляет никаких записей в таблицу «Пользователь» (родительскую таблицу).

Может кто-нибудь помочь решить эту проблему?

Заранее спасибо.

С уважением, Ниратан

1 Ответ

0 голосов
/ 18 мая 2018

Возможно, вы захотите перечитать Javadoc на InheritanceType.

  1. JOINEDСтратегия, в которой поля, специфичные для подкласса, сопоставляются с отдельной таблицей, а не с полями, общими для родительского класса, и выполняется соединение для создания экземпляра подкласса.
  2. SINGLE_TABLEОдна таблица для иерархии классов
  3. TABLE_PER_CLASSТаблица для каждого конкретного класса сущностей

То, что вы описываете, поскольку ваши ожидания более точно совпадают с JOINED.В этом случае атрибуты для суперкласса будут храниться в его собственной таблице, тогда как атрибуты дочернего класса хранятся отдельно в его собственной таблице.Чтобы получить доступ к полной строке, поставщик JPA должен выполнить JOIN во всех таблицах, которые участвуют, чтобы получить полную строку.

В сценарии TABLE_PER_CLASS будет таблицадля каждого конкретного типа сущности, в вашем случае один для User, RegisteredUser и UnregisteredUser, потому что все 3 являются @Entity отображениями.Поставщик JPA рассматривает их как отдельные сущности, но позволяет при необходимости использовать полиморфизм для отображений сущностей.

На уровне базы данных, если вы посмотрите на таблицы, вы заметите, что столбцы, унаследованные от User, являютсятакже присутствует в двух других типах.При создании типа подкласса RegisteredUser его свойство userName будет сохранено в таблице RegisteredUser, а не в таблице User.

Только если вы создадите User, непосредственно будетданные хранятся в User.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...