我所做的
我有一个async
系统,每当在系统中创建新实体时都会做出反应,main
并且该async
系统会在数据库中查询新创建的实体。
我是怎么做的
为async
我使用的系统创建消息hibernate interceptor
。
因此,每当创建一个新实体时onSave
,都会调用拦截器的方法,并且我
将实体 id 保存在 alist
中,现在afterTransactionComplete(Transaction tx)
是什么时候
调用时,我使用消息传递系统(ActiveMq)刷新系统中entity id
的所有内容。list
async
问题是什么
现在problem
,当有一个以上的交易正在进行时,就会出现这种情况......并且两者都有
交易创建实体。
让我举个例子:
Tx_A
创建实体EA1, EA2
。
Tx_B
创建实体EB1, EB2
。
现在假设执行流程是这样发生的:
[1] onSave 为 EA1,我将 EA1 id 添加到 flushList
[2] onSave 为 EB1,我将 EB1 id 添加到 flushList
[3] 用于 Tx_A 的 afterTransactionComplete(tx)
现在,我将在查询数据库时将EA1 and EB1
id 刷新到async
系统
因为交易仍未完成,所以 EB1
发现 null 。Tx_B
现在这个问题可以解决,如果在onsave
调用中我可以获取事务 id,然后afterTransactionCompletion
我可以只刷新与该事务相关的实体
[1] 现在有没有办法获得这个交易ID?
[2] 对于上述问题,还有其他解决方案吗?
我正在使用休眠 4.2.2