Вы имеете ввиду наследование в JPA. Это не так просто, как наследование простого объекта. Эти сущности являются отображениями таблиц базы данных, поэтому их наследование означает, что таблицы в базе данных связаны друг с другом. Существует несколько типов наследования.
@MappedSuperclass
- одна из таких стратегий. При его использовании все поля родительского и дочернего классов отображаются в одну таблицу. Вы можете использовать многоуровневый @MappedSuperclass
, но эти родители не будут сопоставляться с таблицами.
Это может решить вашу проблему, если вы создадите класс с содержимым B
, которое простирается от A
, и отметьте его с @MappedSuperclass
тоже, тогда C
и B
как конкретные объекты наследуются от него. Таким образом, B
становится пустым классом, а C
остается без изменений, но с другим родителем.
Вы также можете использовать другие стратегии.
Например, вы можете аннотировать конкретный класс сущности с помощью @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
, тогда любые сущности, унаследованные от этого аннотированного класса, будут отображены в одну и ту же таблицу.
@Inheritance(strategy = InheritanceType.JOINED)
создает отдельные таблицы для дочерних элементов как хорошо, как родители, и присоединив их к идентификаторам.
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
создаст отдельную таблицу для всех дочерних элементов, а любая таблица будет содержать все реквизиты сущности и родителя.