为什么使用存在条件时,Amazon dynmodb updateItem会抛出ConditionalCheckFailedException?

时间:2019-01-16 11:44:54

标签: java sdk amazon-dynamodb

我有一些类似于以下“降级”示例的代码:

UpdateItemRequest updateRequest = new UpdateItemRequest();
Map<String, ExpectedAttributeValue> expectedValues = Maps.newHashMap();
...
ExpectedAttributeValue expectedAttributeValue = new ExpectedAttributeValue(false);
expectedValues.put("my-attr", expectedAttributeValue);

UpdateItemResult updateItemResult = amazonDynamoDB.updateItem(updateRequest);

如果存在my-attr,则会抛出ConditionalCheckFailedException

“无法评估操作中指定的条件”时,从documentation中抛出ConditionalCheckFailedException

从另一个documentation开始,“如果Exists存在,则DynamoDB假定该表中不存在该属性值。如果实际上不存在该值,则该假设有效,并且操作成功。如果找到该值,则尽管假定该值不存在,但操作将失败,并显示ConditionCheckFailedException”。

文档之间似乎存在矛盾,因为该操作确实被正确评估但未通过。

关键是,在代码中,我希望某些值如果满足某些条件就可以更新,而在不满足条件的情况下不可以更新。

听起来像是完全合法和预期的行为,那么为什么要例外?

为什么不只是在UpdateItemResult中添加一些条件是否满足条件的指示?这种方法也将与JDBC保持一致,在JDBC中,如果不满足条件,则将更新零行-也不例外。

0 个答案:

没有答案