Session.flush() 导致 org.hibernate.StaleStateException:批更新从更新返回了意外的行数:1 实际行数:0 预期:1

Session.flush() causes org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 1 actual row count: 0 expected: 1

我有一个 java 后端 Web 应用程序,它在某种数据库更新后开始抛出错误。

我已经能够将代码隔离到一行,其中正在刷新会话变量:

Session session=getSession();

session.saveOrUpdate(parm);

session.flush();  //This is where it errors

它抛出这个错误:

错误 AbstractFlushingEventListener 无法将数据库状态与会话同步

org.hibernate.StaleStateException:批量更新从更新中返回了意外的行数:1 实际行数:0 预期:1

代码一年多没变;它刚刚开始抛出这个错误。

有什么建议吗?

谢谢

这个错误通常是在休眠无法找到它需要更新的所有行时引起的。这意味着当您尝试更新从数据库中提取的某些对象时,它们实际上不再存在(或者根本不存在)。

这可能是因为另一个线程正在删除它们或者数据库的隔离模式设置为 read_uncommited 因此另一个事务创建的行无法保存(由于事务失败)并且不不存在了。

参考: