Почему Amazon dynmodb updateItem генерирует исключение ConditionalCheckFailedException при использовании условия «существует»? - PullRequest
0 голосов
/ 16 января 2019

У меня есть некоторый код, который выглядит как следующий «пониженный» пример:

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.

Из одной документации , ConditionalCheckFailedException выдается, когда "условие, указанное в операции, не может быть оценено".

Из другой документации , "Если Exists имеет значение false, DynamoDB предполагает, что значение атрибута не существует в таблице. Если на самом деле значение не существует, то допущение является действительным, и операция успешно. Если значение найдено, несмотря на предположение, что оно не существует, операция завершается с условием исключения ConditionCheckFailedException ".

Кажется, существует противоречие между документами, так как операция действительно была правильно оценена, но не прошла.

Дело в том, что в коде я ожидал, что какое-то значение будет обновлено, если какое-то условие выполнено, и не будет обновлено, если условие не выполнено.

Звучит как вполне законное и ожидаемое поведение, так почему исключение?

Почему бы просто не добавить указание на то, было ли выполнено условие в UpdateItemResult? Этот подход также будет соответствовать JDBC, где, если условие не будет выполнено, вы обновите ноль строк - не исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...