我有一些类似于以下“降级”示例的代码:
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中,如果不满足条件,则将更新零行-也不例外。