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

我的工作是通过保留PersonEntity的所有旧版本使其更加易于审核。我认为我有两种选择:


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


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


创建一个具有与PersonEntity相同属性的新类,例如PersonAuditEntity。创建或更新PersonEntity时,请始终保留一个新的PersonAuditEntity。


但是以这种方式,同时存在两个相似的类。我最初的解决方案是将一个PersonEntity简单地包装到PersonAuditEntity中,但是JPA似乎不支持将一个实体嵌入另一个实体中。那正确吗?

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

最佳答案

您是否看过Hibernate ORM Envers?这支持审计实体,例如:

@Audited
private String name;


将记录更改以为实体命名属性。

10-08 13:04