Наследование java сущностей 3 уровня - PullRequest
0 голосов
/ 18 июня 2020

я хочу создать 3 уровня наследственности в java объектах

Пример: A <- B <- C</strong>

Где B наследуется от A и C наследовать от B

Я пытался использовать @MappedSuperclass в классе A:

@MappedSuperclass
public class A {

}

И объект B расширяет A:

@Entity
public class B extends A {

}

объект B является сопоставлен с таблицей базы данных с полями A и B

Как я могу добавить третий уровень C, который расширяет B и A, я пробовал следующий код, но Entity C не сопоставлен с таблицей:

@Entity
public class C extends B {

}

1 Ответ

1 голос
/ 18 июня 2020

Вы имеете ввиду наследование в 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) создаст отдельную таблицу для всех дочерних элементов, а любая таблица будет содержать все реквизиты сущности и родителя.

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