当前位置: 首页 > 知识库问答 >
问题:

关于Morphia版本(乐观锁)

韦睿
2023-03-14
key   :  "id_18035138" 
value :  "{
           "id":"...",
           ...,
           "version":1
          }

存储这些数据后,当需要更新数据时,首先将JSON字符串解析为实体,然后更新属性,然后在Redis中刷新数据。所以Redis中的数据将是最新的数据。

当我们需要将Redis数据保存到MongoDB时,我们首先将JSON字符串解析为实体,然后使用Morphia DAO保存实体,但是我们遇到了这个异常:

java.util.ConcurrentModificationException: Entity of class com.lk.game.entities.User (id='...',version='1') was concurrently updated.

我知道这一定是乐观锁的问题。我们如何解决这个并发异常?

共有1个答案

蒲功
2023-03-14

我们如何解决这个并发异常?

不是同时写作...显然,您至少有两个参与者并行地写回同一个文档。

我不认为这是可能的知道如何或为什么这是发生在您的系统中与您所提供的信息。

    null
 类似资料:
  • 我使用的是morphia 0.109,并定义了一个基类,如下所示: 和预期的Morphia实体 null 编辑以添加:我正在使用的保存过程:

  • 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,会产生冲突,解决方案有两种:乐观锁、悲观锁。 悲观锁在这里不讲,自行Google。 乐观锁假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性,不完整则更新失败。 乐观锁实现方式 使用整数表示数据版本号.更新时检查版本号是否一致,如果相等,则更新成功,且版本号+1.如果不等,则数据已经被修改过,更新失败。 使用时间戳来实现。 本质上也

  • 什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 在本书所展示的例子中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。 如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就

  • 乐观锁Version 要使用乐观锁,需要使用version标记 type User struct { Id int64 Name string Version int `xorm:"version"` } 在Insert时,version标记的字段将会被设置为1,在Update时,Update的内容必须包含version原来的值。 var user User engine

  • 问题内容: 使用版本属性对实体进行乐观锁定可以很好地实现,并且易于实现: 实体具有以下类型的属性: 到目前为止,一切都很好。现在,服务方法返回上述实体的数据传输对象(DTO),视图以HTML形式显示。对于更新页面,VERSION属性存储在HTML隐藏字段中,并与表单一起提交。 目的是使用version属性来确保如果显示的信息带有旧版本,则用户的更新将失败。 控制器通过调用包含更新信息(包括版本属性

  • 我正在尝试使用Maven版本插件将所有子POM升级到父版本,并在父POM中执行所有子模块的构建。Pom文件如下所示 现在,如果我使用Eclipse中的命令在基本POM上运行Maven构建 子模块正在正确构建,但是如果我将base pom版本更新到2.0并使用版本插件命令 版本正在更新,但子模块尚未构建。只有基本pom得到构建。 我是否必须明确指定在某个阶段构建子模块?我错过了什么?。