我知道我可以创建前/后插入/更新/删除侦听器,并且可以记录这些事件,但是鉴于可以同时运行多个线程的多个事务,因此我不确定如何分组他们在一起,或者确定我已经捕获了他们全部。
我也知道我可以在事务完成时收听,但是由于上述问题,我不确定如何确定该事务中包含哪些更改。
如果有帮助,我已经在使用envers创建审核,并使用自定义修订类以便将字段添加到REVINFO记录中。
我缺少冬眠的机械装置吗?
编辑:
我实际上想做的是:事务完成后(希望由spring / hibernate / envers触发),遍历所有已进行的修改(我认为envers可以通过其事件来提供此信息,我很乐于记录这些以交易ID为关键字的位置),然后写出更改为SQS的摘要。
答案 0 :(得分:1)
鉴于您正在使用Envers,我实际上会考虑完全将报告生成步骤与当前应用程序脱钩。这为您带来了许多优势:
您当然可以将所有内容汇总为一个,但是我认为管理这些观点变得更加困难,但是最终的决定权是您自己决定的。
在以下说明中,我将假定轮询/推送是在单独的应用程序中完成的。这个想法是,这个单独的应用程序包含应用程序实体映射(或至少包含感兴趣的实体)。
首先,我建议REVINFO
的修订实体映射也应跟踪已修改的实体类型。稍后在生成报告时,这将非常有用,因为我们可以将实体类型与修订版本号结合使用,并基于此获取修订。
第二,单独的应用程序旨在跟踪最近处理的修订号。每次应用程序的轮询/推送序列触发时,应用程序都会查看是否有任何新修订,如果有,将对其进行处理;否则,它将进行处理。否则它将等待,然后再次轮询。
该概念的总体思路是: