4

我需要审核我的一些数据库表上的所有更改。例如,对于给定的员工,我需要知道所有地址和修改此字段的日期。实际上我正在使用 Spring Data、Hibernate 和 JPA。一个不错的选择是使用 Hibernation Envers,但问题是我无法使用 Spring Data 获取历史记录。另一种选择是有一个 Employee_history 表,但我看不到从两个不同的表中获取 Employee 记录的方法(我想在 Employee 表中插入,但从 Employee 和 Employee_history 中获取数据)。有没有其他方法可以做到这一点?

4

2 回答 2

6

使用 Spring Data Envers :)

“这个项目是 Spring Data JPA 项目的扩展,允许访问由 Hibernate Envers 管理的实体修订。”

https://github.com/SpringSource/spring-data-envers

于 2013-05-01T21:48:50.907 回答
4

您必须回答的第一个问题应该是您需要的审计级别。一个简单的更改列表就足够了吗?字符串表示是否足够好?或者您是否希望能够支持您的实体的修订版,您可以“轻松”返回并获取修订版 X 的数据?

如果更改列表就足够了,并且无论如何您都使用休眠,那么我会选择一个HibernateEventListener(不是 JPA),仅仅是因为您已经获得了 postevents 中的所有更改。无需自己创建增量。

另一方面,Envers 很容易集成和配置。使用 @Audited 注释您的实体足以获得“完整”修订支持。在我看来,您不能直接使用 Spring Data 查询修订实体这一事实是次要的,因为您始终可以编写AuditReaderRepositorybean 并直接使用 hibernate 审计查询接口。在这种情况下,找出两个修订之间的更改列表将留给您,这基本上意味着获取修订并确定它们之间的增量。在这种情况下,Envers 的主要优点是用户表示仍然是一个用户类,而不仅仅是一个字符串(创建者 fe)

这取决于您希望支持哪个级别的审核,我会选择所需的最小实施。有一些很好的博客介绍了在 www 中选择什么样的审计策略。

于 2013-05-01T05:23:50.373 回答