Java AWS DynamoDB, как увеличить число - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь добавить 1 к номеру, а затем получить новый номер обратно.

Я не могу правильно настроить UpdateItemSpec. Пожалуйста помоги. Кажется, каждый пример показывает что-то свое, и ничего из этого не работает.

Вот мой код:

AmazonDynamoDBClient dbClient = new AmazonDynamoDBClient(
            new BasicAWSCredentials("SECRET", "SECRET")
);
dbClient.setRegion(Region.getRegion(Regions.fromName("us-west-1")));
DynamoDB dynamoDB = new DynamoDB(dbClient);
Table table = dynamoDB.getTable("NumTable");

GetItemSpec spec = new GetItemSpec()
  .withPrimaryKey("PKey","OrderNumber");

Item item = table.getItem(spec);
logger.info(item.toJSONPretty());

UpdateItemSpec updateItemSpec = new UpdateItemSpec()
            .withPrimaryKey("Pkey",
                    "OrderNumber")
            .withReturnValues("UPDATED_NEW")
            .withUpdateExpression("ADD #k :incr")
            .withNameMap(new NameMap().with("#k", "NumVal"))
            .withValueMap(
                    new ValueMap()
                            .withNumber(":incr", 1));
                        //.withString(":incr", "{N:\"1\"}"));
                        //I've tried a million other ways too!


UpdateItemOutcome outcome = table.updateItem(updateItemSpec);
logger.info(outcome.getItem().toJSONPretty());

Консоль показывает, как работает первая часть get:

Sat Nov 09 00:46:07 UTC - 2019-11-09 00:46:07 f1475303-7585-4804-8a42-2e0a9b16b1dc INFO Commission:88 - {
Sat Nov 09 00:46:07 UTC - "NumVal" : 200000,
Sat Nov 09 00:46:07 UTC - "PKey" : "OrderNumber"
Sat Nov 09 00:46:07 UTC - }

Но часть обновления выдает эту ошибку (среди прочих):

Sat Nov 09 00:46:08 UTC - The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: 8TPDT2EVMC0G0GF3IFK7SU6777VV4KQNSO5AEMVJF66Q9ASUAAJG): com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: 8TPDT2EVMC0G0GF3IFK7SU6777VV4KQNSO5AEMVJF66Q9ASUAAJG) at [........]

Я действительно чувствую, что ключевой элемент соответствует схеме: '(

Вот картинка из моегоКонсоль AWS:

enter image description here

1 Ответ

2 голосов
/ 10 ноября 2019

Ваша реализация выглядит хорошо для меня. Ошибка из-за ошибки опечатки в вашем коде UpdateItemSpec.

UpdateItemSpec updateItemSpec = new UpdateItemSpec()
            .withPrimaryKey("Pkey",
                    "OrderNumber")

Опечатка "Pkey". Это должен быть «PKey», поэтому он работает в коде GetItemSpec.

...