我需要审核一些数据库表的所有更改。例如,对于给定的员工,我需要知道所有地址以及修改此字段的日期。实际上我正在使用Spring Data,Hibernate和JPA。一个很好的选择是使用Hibernation Envers,但问题是我无法使用Spring Data获取历史记录。另一种选择是拥有一个Employee_history表,但我没有看到从两个不同的表中获取Employee记录的方法(我想在Employee表中插入,但从Employee和Employee_history中获取数据)。有没有其他方法可以实现这个目标?
答案 0 :(得分:6)
使用Spring Data Envers:)
"该项目是Spring Data JPA项目的扩展,允许访问由Hibernate Envers管理的实体修订。 "
答案 1 :(得分:4)
您必须回答的第一个问题应该是您需要的审核级别。是一个简单的变化列表吗?字符串表示是否足够好?或者您是否希望能够支持您的实体的修订版本,以便能够“无任何麻烦”返回并获取修订版X的数据?
如果更改列表足够并且您仍然使用hibernate,那么我会选择HibernateEventListener
(而不是JPA),因为您已经获得了postevents中的所有更改。无需自己创建增量。
另一方面,Envers很容易集成和配置。使用@Audited注释您的实体足以获得“完整”修订支持。在我看来,您无法直接使用Spring Data查询修订实体这一事实是次要的,因为您始终可以编写AuditReaderRepository
bean并直接使用hibernate审计查询接口。在这种情况下,在两个修订版之间摆弄更改列表将留给您,这基本上意味着获取修订版并确定它们之间的增量。在这种情况下,Envers的主要优点是用户表示仍然是User类,而不仅仅是String(创建者f.e。)
这取决于您希望支持哪种级别的审核,我会选择最小的实施方案。有一些很好的博客可以在www。
中选择哪种审计策略