java - 如何通过JPA持久化实体的所有版本?

标签 java entity-framework hibernate jpa

我正在审核实体的更改,例如 PersonEntity。 现有代码支持创建或编辑人员的个人资料并保留相应的 PersonEntity。如果编辑,它将更新数据库中的PersonEntity。它还支持根据年龄等一些属性查询人员。此外,它还提供API来设置“创建者”,“更新者”和“更新时间” - 一般来说它是相当可审计的。

我的工作是通过保留 PersonEntity 的所有旧版本来使其更具可审核性。我想我有两个选择:

  1. 即使进行编辑也保留新的 PersonEntity。这样,PersonEntity 的所有版本都在数据库中。我还应该,1)在 PersonEntity 中添加一个属性来指示它是否是最新的; 2)当创建或更新PersonEntity时,我需要设置该标志; 3)更改所有查询方法,仅获取最新的PersonEntity。

在我看来,这不是一个好的选择,因为 3) 会导致大量代码更改,并且也会减慢查询速度。

  • 创建一个与 PersonEntity 具有相同属性的新类,例如 PersonAuditEntity。创建或更新 PersonEntity 时,始终保留一个新的 PersonAuditEntity。
  • 但这样一来,两个相似的类就同时存在了。我最初的解决方案是简单地将 PersonEntity 包装到 PersonAuditEntity 中,但 JPA 似乎不支持将一个实体嵌入另一个实体中。是对的吗?

    任何其他建议将不胜感激。

    最佳答案

    你看过Hibernate ORM Envers吗? ?这支持审计实体,例如:

    @Audited
    private String name;
    

    将记录实体名称属性的更改。

    关于java - 如何通过JPA持久化实体的所有版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33792144/

    相关文章:

    java - Tomcat server.xml 解析器

    java - 在 Objective-C 中从指针创建 NSWindow?

    c# - 防止 EF 5 生成属性

    c# - 性能分析 ADO.NET 和 Entity Framework

    java - Spring STS DB 与 Jpa 的连接

    java - 未设置 'hibernate.dialect' 时连接不能为空

    java - 调试停止的 RxJava zip 运算符

    c# - Linq 到 Entity Framework : Select with only subset of child elements

    java - 使用继承时存储 'employee code' 的公共(public)值

    java - 单例要经过几个进程?