java如何通过JPA持久化实体的所有版本?
我正在审计一个实体的变化,比如PersonEntity。 现有代码支持创建或编辑一个人的个人资料,并保留相应的个人身份。如果编辑,它将更新数据库中的个人信息。它还支持基于年龄等几个属性对人员进行get查询。此外,它还提供了API来设置“创建人”、“更新人”和“更新时间”——通常它是可审核的
我的工作是通过坚持一个人的所有旧版本,使其更具可审计性。我想我有两个选择:
- 即使编辑,也要保持一个新的人格。这样,所有版本的PersonEntity都在数据库中。我还应该,1)在PersonEntity中添加一个属性,以表明它是否是最新的;2) 当创建或更新PersonEntity时,我需要设置该标志;3) 将所有查询方法更改为仅获取最新的PersonEntity李>
在我看来,这不是一个好的选择,因为3)将导致大量代码更改,并将减慢查询速度
- 创建一个与PersonEntity具有相同属性的新类,比如Personaudienty。在创造或更新个性时,始终保持一种新的个性李>
但就这样,两个类似的阶级同时存在。我最初的解决方案是简单地将PersonEntity包装成Personaudentity,但JPA似乎不支持在另一个实体中嵌入实体。是这样吗
如有其他建议,我们将不胜感激
# 1 楼答案
你看过Hibernate ORM Envers吗?这支持审计实体,例如:
将记录实体名称atribute的更改
# 2 楼答案
另一个选择
添加一个新列,当该行被替换为新列时,该列被设置为非活动。只添加新行,从不更新行
所有选择都需要使用额外的where子句“and inactive=false”