Как использовать наследование Java в Jpa Entities - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь создать jpa сущностей с помощью инерции , я не использую какой-либо jpa полиморфный механизм для этого. Причина в том, что я хочу, чтобы классы моделей были независимыми, поэтому, если я хочу использовать Jpa , я могу расширить те же классы моделей и создать Jpa-сущности и выполнить работу. Мой вопрос заключается в том, возможно ли это достичь без использования jpa polymorphic механизма, потому что, когда я пытаюсь работать с jpa сущностями , созданными после расширения модельных классов I я не вижу свойства, унаследованные от super класса, но я вижу новые свойства в таблице , если я добавлю новые свойства расширенной 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-наследования . это возможно?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

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

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

0 голосов
/ 29 июня 2018

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

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