没有 id 的 JPA/Hibernate 继承

Posted

技术标签:

【中文标题】没有 id 的 JPA/Hibernate 继承【英文标题】:JPA/Hibernate inheritance without id 【发布时间】:2015-07-24 03:53:36 【问题描述】:

是否可以在没有 id 的情况下在 JPA/Hibernate 中进行继承? 我的用例:

我有多个实体,我希望每次进行更改时都记录时间戳。所以我创建了 AbstractResource 并希望每个派生类都继承属性和逻辑(以避免在每个类中一遍又一遍地编写相同的东西)。

我的问题是hibernate想要一个实体的ID,我不关心id,因为我唯一关心的是附加属性。每个实体都可以有任何它想要的 id(String、int、long、不同的名称等)。

我尝试使用 Embeddable,但似乎休眠不支持 Embeddable 的继承。你有什么想法,我的任务如何完成?

派生“已审核”实体的父类:

@Embeddable
@EntityListeners(AbstractResourceListener.class)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class AbstractResource 
    private long modifyTimestamp;

    @Column(name = "_MODIFY_TIMESTAMP", nullable = true)
    public long getModifyTimestamp() 
    return modifyTimestamp;
    

    public void setModifyTimestamp(long modifyTimestamp) 
    this.modifyTimestamp = modifyTimestamp;
    

【问题讨论】:

【参考方案1】:

@MappedSuperclass 是超类的注解,您可以在审计中扩展和使用它。请看example

【讨论】:

以上是关于没有 id 的 JPA/Hibernate 继承的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot JPA Hibernate:即使实体类中存在@Id,也没有为实体错误指定标识符

如何使用 JPA/Hibernate 在孩子的 id 中引用父母的 id?

JPA / Hibernate:CriteriaBuilder - 如何使用关系对象创建查询?

如何设置在 Java JPA/Hibernate 中不是自动生成的 @Id 主键?

Spring JPA,Hibernate 仅从其他实体获取 PK 或 Id

Spring JPA,Hibernate仅从其他实体获取PK或Ids