使用Hibernate Envers的Spring Data JPA和Spring Boot审计

3

我正在使用Spring Data JPA和Spring Boot来开展我的项目。

我需要对对象进行审计(Create/Update/Delete)。我可能需要获取特定对象的审计版本。我在网上查过,发现Spring Data Envers无法获取修订版本,并且不跟踪删除操作?

所以我的问题是:

1)我们能否将Hibernate Envers与Spring data JPA集成?

2)我们有本地查询、HQL和Spring data JPA的更新/保存/删除动态查询,那么Hibernate envers能否跟踪所有对象?

由于我很新于审计,请告知以上问题。谢谢!

3个回答

8

这是可能且容易的!我使用了Spring Boot、Spring Data JPA和Hibernate与Envers完成了一个示例项目,用于审计一些带有关系的表格。

以下是示例链接:https://github.com/jcalvopinam/example-envers

希望对你有所帮助,如果你有任何问题,请告诉我。


8
我们能否将Hibernate envers与Spring data JPA集成?
是的,Hibernate Envers直接与Hibernate ORM集成,而Spring Data JPA已经集成了Hibernate ORM,因此您可以直接使用它。
我们有原生查询、HQL和Spring data JPA更新/保存/删除动态查询,那么Hibernate envers能否跟踪所有对象呢?
只要您通过Session save/update或EntityManager的persist/merge操作操作实体,Hibernate将引发必要的事件,Envers就会跟踪您的更改。
如果您使用本地SQL或JPA的CriteriaUpdate/CriteriaDelete操作来操纵数据库记录,那么Envers将无法捕获这些更改。这是因为Hibernate不会为那些批量或无状态的操作引发事件,从而允许Envers审计这些更改。

1
非常感谢您的回复,我现在明白了。原生SQL不会为Hibernate生成任何事件,因此也不会进行审计。由实体管理器管理的任何HQL都将生成审计。那么Spring Data JPA动态查询呢?例如@Query(value="delete from Employee emp where emp.id = ?1 "),这是否会创建审计记录? - Khushi
我认为由于Spring Data JPA查询将在事务中运行,因此我应该能够进行审计。谢谢。 - Khushi

0

是的,Spring Data JPA和Hibernate Envers集成没有问题。它可以跟踪保存、更新和删除操作。 您只需要在类上方添加@Audited注释即可。


谢谢您的回复,能请您回答第二个问题吗? - Khushi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接