首页 文章

如何在for循环(Hibernate envers)中进行审计?

提问于
浏览
0

我正在使用hibernate envers进行审计 . 它工作正常但今天我意识到如果我在for循环中创建实体它不会 . 在为sql查询设置log true后,我发现,每次迭代后rev-tables都不会更新 . 以某种方式,hibernate收集所有更改并在请求结束时触发审计命令?如何在for-loop中每次迭代后让hibernate进行审计?

我已经尝试过的:

for (...) {

 Obj a = new Obj();
 objRepository.save(a);

 entityManager.flush();
 entityManager.clear();
}

2 回答

  • 0

    正如@gtosto指出的那样,Hibernate Envers在事务边界的基础上运行,因此在提交之前,审计记录不会被刷新和持久化 .

    同步这种方法的一种方法是自己手动控制事务边界作为for循环的一部分,这样你基本上可以持久保存列表和提交的小桶 .

    这里的缺点是性能密集,特别是如果你试图保持的对象列表非常大 .

    jira问题HHH-9622概述了使 AuditProcess 可以冲洗的请求;但是,引入需要考虑的这种行为会产生后果 .

  • 0

    实际上问题是我将@Transactional注释添加到相应的类中 . 删除它,一旦调用 objRepository.save(a) ,hibernate将触发审计命令 . 不需要实体经理 .

相关问题