【发布时间】:2009-12-18 19:40:30
【问题描述】:
我有一个进程创建一个数据库实体,然后启动第二个进程。然后它等待第二个进程在完成其处理之前找到并更新数据库实体,从而提交数据库实体。问题似乎在于,由于执行实体创建的初始进程在第二个进程尝试查找实体(它找不到)时尚未提交数据库实体,因此第一个进程永远不会完成,因为第二个进程无法完成,事情就被搞砸了。
一些上下文:第一个进程创建一个实体,在外部机器上启动第二个进程,并将实体状态设置为已启动。外部机器上的第二个进程调用 Web 服务,该 Web 服务找到实体并将实体的状态更新为 READY。第一个进程有一个循环来检查实体的状态,一旦它从 STARTED 更改为 READY ,它就会进行额外的处理并完成。然而,第二个进程永远无法找到实体(我认为),因为它永远不会从 Hibernate 会话中提交,它是在第一个进程中创建的,而在第二个进程尝试查找实体时尚未完成。
有什么更好的方法可以避免这种事情发生?有没有办法在启动第二个进程之前中途提交事务,以便让实体存在于数据库中以供第二个进程查找?
感谢您的建议等。
【问题讨论】:
标签: hibernate transactions multithreading deadlock