我需要审计我的一些DB表上的所有更改。例如,对于给定的员工,我需要知道此字段被修改的所有地址和日期。实际上,我使用的是Spring Data、Hibernate和JPA。一个很好的选择是使用冬眠Envers,但问题是我不能用Spring数据获取历史记录。另一种选择是使用Employee_history表,但是我没有看到从两个不同的表中获取员工记录的方法(我想插入到Employee表中,但是从Employee和Employee_history中获取数据)。有没有其他方法可以做到这一点?
发布于 2013-05-01 13:23:50
您必须回答的第一个问题应该是您需要的审核级别。一个简单的更改列表就足够了吗?字符串表示是否足够好?或者你希望能够支持你的实体的修订,在那里你可以“没有任何麻烦”地返回并获取修订X的数据?
如果一系列更改就足够了,而且您仍然使用hibernate,那么我会选择HibernateEventListener (而不是JPA),因为您已经在postevents中获得了所有更改。不需要自己创建增量。
另一方面,Envers非常容易集成和配置。用@Audited注释你的实体就足以获得“完整的”修订支持。在我看来,不能直接使用Spring Data查询修订实体的事实是次要的,因为您总是可以编写AuditReaderRepository bean并直接使用hibernate审计查询接口。在这种情况下,摆弄两个修订之间的变更列表将留给您,这基本上意味着获取修订并确定它们之间的增量。Envers在这种情况下的主要优点是,用户表示仍然是用户类,而不仅仅是字符串(创建者f.e.)
这取决于您希望支持的审计级别,我会选择所需的最小实现。有一些很好的博客关于在www中选择什么样的审计策略。
发布于 2013-05-02 05:48:51
使用Spring数据Envers :)
“此项目是Spring Data JPA项目的扩展,允许访问由Hibernate Envers管理的实体修订。”
https://stackoverflow.com/questions/16309911
复制相似问题