Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DynamoDBMapper乐观锁定-我必须首先调用负载吗?_Java_Amazon Dynamodb - Fatal编程技术网

Java DynamoDBMapper乐观锁定-我必须首先调用负载吗?

Java DynamoDBMapper乐观锁定-我必须首先调用负载吗?,java,amazon-dynamodb,Java,Amazon Dynamodb,我正在尝试为我正在创建的应用程序使用乐观锁定。AWS网站上提到“使用乐观锁定,每个项都有一个充当版本号的属性。如果从表中检索项目,应用程序将记录该项目的版本号。您可以更新该项,但仅当服务器端的版本号未更改时。如果存在版本不匹配,则表示其他人在您之前已修改了该项。更新尝试失败,因为该项的版本已过时。“如果我更新对象时没有先调用load,那么如果发生版本不匹配,乐观锁定是否仍然有效?换句话说,乐观锁定是否必须调用load才能起作用 换句话说,乐观锁工作时调用加载是强制性的吗 事实并非如此,但一般来说

我正在尝试为我正在创建的应用程序使用乐观锁定。AWS网站上提到“使用乐观锁定,每个项都有一个充当版本号的属性。如果从表中检索项目,应用程序将记录该项目的版本号。您可以更新该项,但仅当服务器端的版本号未更改时。如果存在版本不匹配,则表示其他人在您之前已修改了该项。更新尝试失败,因为该项的版本已过时。“如果我更新对象时没有先调用load,那么如果发生版本不匹配,乐观锁定是否仍然有效?换句话说,乐观锁定是否必须调用load才能起作用

换句话说,乐观锁工作时调用加载是强制性的吗

事实并非如此,但一般来说,如果在尝试更新项目之前不加载该项目,您将很难使用乐观锁定

原因在于它的工作方式:当您发送一个用于乐观锁定的条件更新请求时,条件通常位于项目的
属性的值上,该属性也会在同一个更新请求中更新(通常增加1)

因此,为了使更新生效,您需要告诉DynamoDB该
version
属性的值必须是什么

如果您在尝试发送条件更新请求以进行乐观锁定之前未加载该项,您如何知道当前版本是什么?如果您不知道该版本是什么,则通常无法期望条件更新请求正常工作


也就是说,在某些情况下,对某些请求不使用乐观锁定可能是有意义的

例如,假设您需要更改给定属性的值,并且项目状态中的任何内容都不会更改您的需求。在这种情况下,您不需要对此更新进行乐观锁定:您可以简单地告诉DynamoDB执行更新(同时增加
version
属性!)。如果任何其他并发操作也未使用乐观锁定(即,未使用条件更新),则它们将成功;如果使用乐观锁定,则它们将失败