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

并发更新期间休眠StaleObjectStateException

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

并发更新期间休眠StaleObjectStateException

以下是乐观锁定的工作方式:

  1. 用户1开始编辑recordA -
    recordA
    从与版本数据库加载
    V
  2. 用户2开始编辑recordA -
    recordA
    从与版本数据库加载
    V
    -完全一样,上面
  3. USER1节省recordA -
    recordA
    被保存,但Hibernate的透明补充说:
        UPDATE    ...    SET V = V + 1    WHERe version = V

此时,Hibernate验证从数据库返回的修改记录的数量是否正好为 1 。如果查询的记录修改为0,则表示该

WHERe version =V
子句未得到满足。在这种情况下,一切正常,版本设置为
V + 1
(重要!)

  1. User2保存recordA -Hibernate所做的事情完全相同,但
    V
    内存中仍然有旧版本号。不幸的是,在这种情况下,
    WHERe version = V
    由于版本为now,所以不满足条件
    V + 1
    。查询返回0条已修改的记录,这使Hibernate(正确)认为该​​记录在此期间已被修改。这就是异常的意思。

所以你对此能做些什么?只需捕获异常并:

  1. 重复整个交易,但是重新加载实体(使用新版本

    V + 1
    ),以便在更新后不会丢失最后的更改

  2. 或通知用户在此期间对象已被修改,以便她可以检查新版本。

两种解决方案都很好,具体取决于您的用例。



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

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

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