在更新数据库之前执行的PostInsertEventListener

时间:2011-10-25 11:27:03

标签: java database hibernate

我在侦听器中放置了一个Thread.sleep(50000)来证明这一点,并且数据字面上没有存储在数据库中50秒。

这很奇怪而且相当令人失望,因为我将实体的ID(有BTW)传递给Web服务,访问同一个数据库。如果我不在新线程中进行调用,则Web服务会抛出异常,因为数据不存在。

我可以应用一个hacky方法,并在新线程内进行调用,之前可能会延迟一段时间,但那会很难看

请帮助。

1 个答案:

答案 0 :(得分:1)

这与插入在侦听器之后完成的事实无关。这与事务的提交在之后完成有关。您的Web服务使用另一个事务作为插入数据的事务,因此在插入事务提交之前它不会看到插入的数据。

您需要两阶段提交才能执行您想要的操作。通过JMS队列调用Web服务,并确保JMS引擎和数据库都由唯一的XA事务管理器处理。