【发布时间】:2015-11-18 23:00:09
【问题描述】:
我正在审核一个实体的变化,比如 PersonEntity。 现有代码支持创建或编辑个人资料并保留相应的 PersonEntity。如果进行编辑,它将更新数据库中的 PersonEntity。它还支持根据年龄等一些属性获取人员的查询。此外,它还提供 API 来设置“创建者”、“更新者”和“更新时间”——一般来说是可审计的。
我的工作是通过持久化 PersonEntity 的所有旧版本来使其更具可审计性。我想我有两个选择:
- 即使在编辑时也保留一个新的 PersonEntity。这样,所有版本的 PersonEntity 都在数据库中。我还应该,1)在 PersonEntity 中添加一个属性以指示它是否是最新的; 2) 创建或更新 PersonEntity 时,我需要设置该标志; 3) 更改所有查询方法,只获取最新的 PersonEntity。
在我看来,这不是一个好的选择,因为 3) 会导致大量代码更改,并且也会减慢查询速度。
- 创建具有与 PersonEntity 相同属性的新类,例如 PersonAuditEntity。创建或更新 PersonEntity 时,始终保持一个新的 PersonAuditEntity。
但是这样,两个相似的类同时存在。我最初的解决方案是简单地将 PersonEntity 包装到 PersonAuditEntity 中,但 JPA 似乎不支持将实体嵌入到另一个实体中。那正确吗?
任何其他建议将不胜感激。
【问题讨论】:
-
Hibernate Envers 正是您所寻找的。 hibernate.org/orm/envers
标签: java entity-framework hibernate jpa