没有 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 主键?