如何在Jpa实体中使用Java继承

4
我试着以继承的方式创建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>{}

如果我运行这个代码,我会看到一个带有“标题”列的表格。那是因为我已在“文章”中显式添加了该属性,但我想使用java继承来使其他列出现在表格中。这可能吗?

2个回答

6
简短的回答是不行。由于其他子类可能具有不同的列名和其他参数,并且可能选择不保存这些列,因此JPA无法直接使用对象的继承。

因此,JPA有其自己的继承映射,对象可能必须遵循。像MappedSuperclass这样的用法可能会有所帮助。 参考:请参阅http://www.baeldung.com/hibernate-inheritance获取Hibernate的更多信息。


4

但我不建议在子类中复制字段。相反,在超类中提供基本字段的getter和setter。 - Serg Vasylchak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接