我有一个创建数据库实体的进程,然后启动第二个进程。然后,它在第二个进程上等待,在完成其处理之前查找并更新数据库实体,从而提交数据库实体。麻烦似乎是因为执行实体创建的初始进程在第二个进程试图找到实体(它找不到)时没有提交数据库实体,所以第一个进程永远不会完成,因为第二个进程无法完成,事情也很糟糕。
某些上下文:第一个进程创建实体,在外部计算机上启动第二个进程,并将实体状态设置为STARTED。外部计算机上的第二个进程进行Web服务调用,此Web服务查找实体并将实体的状态更新为READY。第一个进程有一个循环,它检查实体的状态,一旦它从STARTED更改为READY,它就会执行额外的处理并完成。然而,第二个进程永远无法找到实体(我认为),因为它从未在Hibernate会话中提交,它在第一个进程中创建,而第一个进程在第二个进程尝试查找实体时尚未完成。
有什么更好的方法可以做到这一点,以免发生这种事情?有没有办法在第二个进程启动之前的中途提交事务,以便让实体存在于数据库中以供第二个进程查找?
感谢您的建议等。
答案 0 :(得分:0)
Hibernate会话甚至不是线程安全的,更不用说幸存这种事了。您需要为单个线程的单个工作单元使用会话,在这种情况下,您有三个 - 对象创建,无论其他进程在做什么,然后在最后进行对象更新。你需要为这三个人使用(并刷新)单独的会话。