gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:52:17 26 4
gpt4 key购买 nike

我正在审核实体的更改,例如 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com