Как использовать наследование Java в объектах Jpa

Я пытаюсь создать объекты JPA с помощью наследования, я не использую для этого какой-либо полиморфный механизм JPA. Причина в том, что я хочу, чтобы классы моделей были независимыми, поэтому, если я хочу использовать JPA, я могу расширить те же классы моделей и создать объекты JPA и выполнить свою работу. Мой вопрос: можно ли этого достичь без использования механизма полиморфизма JPA, потому что, когда я пытаюсь иметь дело с объектами JPA, созданными после расширения классов модели, я не вижу свойств, унаследованных от суперкласса, но я вижу новые свойства в таблице, если я добавлю новые свойства в расширенную сущность JPA.

Вот мои сущности:

@Data
public abstract class AtricleEntity {

    protected Integer Id;
    protected String title;
    protected Integer status;
    protected String slug;
    protected Long views;
    protected BigDecimal rating;
    protected Date createdAt;
    protected Date updatedAt;
}


@Data
@Entity
@Table(name = "articles_article")
@RequiredArgsConstructor
public class Article extends AtricleEntity {

    public static final String TABLE_NAME = "articles_article";

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer Id;

    private String title;
}



@Repository
public interface ArticleRepository extends JpaRepository<Article, Integer>{}

Я могу увидеть таблицу со столбцом title, созданную, если я запустил это. это потому, что я явно добавил это свойство в Article, но я хочу, чтобы другие столбцы отображались в таблице с помощью наследования java. Это возможно?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
875
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Аннотации @MappedSuperclass, помещенные в ваш суперкласс, должны помочь. https://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html

Но я бы не предлагал дублировать поля в дочерних классах. Вместо этого предоставьте средства получения и установки базовых полей в суперклассе.

Serg Vasylchak 29.06.2018 11:10
Ответ принят как подходящий

Простой ответ - НЕТ. JPA не может использовать наследование объекта из коробки по той простой причине, что другие дочерние элементы будут иметь другие имена столбцов и другие параметры и могут даже не сохранять эти столбцы.

Итак, JPA имеет собственные сопоставления наследования, которым, возможно, придется следовать объекту. Может помочь использование типа MappedSuperclass. Справка :http://www.baeldung.com/hibernate-inheritance для гибернации.

Другие вопросы по теме