我有一个 Web 应用程序,它由一个具有两个操作的 Web 服务组成:createA
和createB
. 为端点注册了一个处理程序。此处理程序在收到请求时打开一个会话并启动一个事务。然后执行请求操作的代码。在响应被发回之前,事务被提交并且会话被关闭。
的代码createA
包括创建一个类型的实体A
并使用Session.save()
方法将其持久化。在DEBUG模式下,Session.save()
调用之后,可以看到会话的ActionQueue中有一个插入。
的代码createB
包括:
- 检索先前创建的类型实体
A
- 创建一个
B
引用实例的实体A
(B 有一个表示关联的属性A
) - 更新
A
以引用的新实例B
- 调用
Session.save()
新的实例B
- 调用
Session.update()
新的修改实例A
但是在DEBUG模式下,调用Session.save()
and后Session.update()
,对应Session的ActionQueue为空。但是,事务提交后,我可以在数据库中看到创建的实体。
操作createA
和createB
按此顺序调用,无需调试。B
当它尝试检索A
先前使用条件和方法创建的实例时,在执行创建期间出现错误Session.list()
。问题是A
找不到的实例。
但是,如果我在 DEBUG 中重复相同的操作序列或Thread.sleep(15s)
在两个操作的调用之间使用,A
则可以找到 的实例。
谢谢
编辑:我忘了确切地说它适用于某些机器但不适用于其他机器。而且我看不出这些机器之间有任何区别。