有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在审计一个实体的变化,比如PersonEntity。 现有代码支持创建或编辑一个人的个人资料,并保留相应的个人身份。如果编辑,它将更新数据库中的个人信息。它还支持基于年龄等几个属性对人员进行get查询。此外,它还提供了API来设置“创建人”、“更新人”和“更新时间”——通常它是可审核的

我的工作是通过坚持一个人的所有旧版本,使其更具可审计性。我想我有两个选择:

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

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

  1. 创建一个与PersonEntity具有相同属性的新类,比如Personaudienty。在创造或更新个性时,始终保持一种新的个性

但就这样,两个类似的阶级同时存在。我最初的解决方案是简单地将PersonEntity包装成Personaudentity,但JPA似乎不支持在另一个实体中嵌入实体。是这样吗

如有其他建议,我们将不胜感激


共 (2) 个答案

  1. # 1 楼答案

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

    @Audited
    private String name;
    

    将记录实体名称atribute的更改

  2. # 2 楼答案

    另一个选择

    添加一个新列,当该行被替换为新列时,该列被设置为非活动。只添加新行,从不更新行

    所有选择都需要使用额外的where子句“and inactive=false”