栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

该行已由另一个事务更新或删除(或未保存的值映射不正确)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

该行已由另一个事务更新或删除(或未保存的值映射不正确)

常不建议使用悲观锁定,就数据库方面的性能而言,这是非常昂贵的。你提到的问题(代码部分)尚不清楚,例如:

  • 如果你的代码同时被多个线程访问。
  • 你如何创建
    session
    对象(不确定是否使用Spring)?
    hibernate会话对象不是线程安全的。因此,如果有多个线程访问同一个会话并尝试更新同一个数据库实体,则你的代码可能最终会出现这种错误情况。

因此,这里发生的事情是,有多个线程尝试更新同一实体,一个线程成功,当下一个线程提交数据时,它看到其已被修改并最终抛出

StaleObjectStateException

编辑:

在Hibernate中有一种使用Pessimistic Locking 的方法。但是这种机制似乎存在一些问题。但是,我偶然发现了一个hibernate状态的错误(HHH-5275)。该错误中提到的情况如下:

两个线程正在读取同一数据库记录。这些线程中的一个应使用悲观锁定,从而阻止另一个线程。但是两个线程都可以读取数据库记录,从而导致测试失败。

这与你所面临的非常接近。如果这不起作用,请尝试此操作,我能想到的唯一方法是使用本机SQL查询,你可以在其中使用查询在postgres数据库中实现悲观锁定SELECT FOR UPDATE。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390588.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号