Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要知道hibernate何时完成了它的事务_Hibernate - Fatal编程技术网

我需要知道hibernate何时完成了它的事务

我需要知道hibernate何时完成了它的事务,hibernate,Hibernate,我有一个实体,它使用postPersist和postUpdate注册了CallBackListener。侦听器获取实体并将ID提交给JMS队列,该队列执行进一步的处理。消息提交和使用速度非常快,以至于它们发生在原始会话完成其事务之前 因此,MDB要么找不到该实体,要么该实体已过时。我真正想要的是一种让MDB检查的方法,以在使用消息之前验证原始事务是否完成 有什么建议吗?您可以在会话工厂或会话中注册org.hibernate.Interceptor的实例,并在咨询Transaction.wasCo

我有一个实体,它使用postPersist和postUpdate注册了CallBackListener。侦听器获取实体并将ID提交给JMS队列,该队列执行进一步的处理。消息提交和使用速度非常快,以至于它们发生在原始会话完成其事务之前

因此,MDB要么找不到该实体,要么该实体已过时。我真正想要的是一种让MDB检查的方法,以在使用消息之前验证原始事务是否完成


有什么建议吗?

您可以在
会话工厂
会话
中注册
org.hibernate.Interceptor
的实例,并在咨询
Transaction.wasCommitted
后,将消息发布到
后TransactionCompletion(Transaction tx)
方法中的队列中。在
afterTransaction
方法中,您可能必须在某个全局threadlocal中访问实体的ID。

我对此进行了一些测试,它似乎在DB事务级别进行拦截。换句话说,它在将数据提交到数据库后而不是在提交java事务时触发。我还在挖。如果在DB txn提交后发送JMS消息不是更好吗?这样MDB将看到提交的数据。或者您是否计划实现一个事务引擎,将输入作为JMS消息,并使用RDBMS进行持久化?