Я пытаюсь создать объекты 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. Это возможно?




Аннотации @MappedSuperclass, помещенные в ваш суперкласс, должны помочь.
https://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html
Простой ответ - НЕТ. JPA не может использовать наследование объекта из коробки по той простой причине, что другие дочерние элементы будут иметь другие имена столбцов и другие параметры и могут даже не сохранять эти столбцы.
Итак, JPA имеет собственные сопоставления наследования, которым, возможно, придется следовать объекту. Может помочь использование типа MappedSuperclass.
Справка :http://www.baeldung.com/hibernate-inheritance для гибернации.
Но я бы не предлагал дублировать поля в дочерних классах. Вместо этого предоставьте средства получения и установки базовых полей в суперклассе.