Динамо DB: UpdateItemSpec: множественное выражение обновления - не работает - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь добавить / обновить запись (строку) в таблице с множественным выражением обновления как -

UpdateItemSpec updateItemSpec = new UpdateItemSpec()
   .withPrimaryKey("phoneNumber",phoneNumber)
   .withReturnValues(ReturnValue.ALL_NEW)
   .withUpdateExpression("set #tid = :tidValue")
   .withUpdateExpression("set #ttl = if_not_exists(#ttl,:ttlValue)")
   .withNameMap(new NameMap().with("#ttl","ttl").with("#tid", "tid"))
   .withValueMap(new ValueMap().with(":ttlValue",ttl).with(":tidValue", tid));

table.updateItem(updateItemSpec);

Но я получаю ошибку -

Exception in thread "main" com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: Value provided in ExpressionAttributeNames unused in expressions: keys: {#tid} (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: 6d8e2119-cb73-43f2-a3ab-3868ab822630)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1630)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1302)

СледовательноУ меня есть следующие запросы -

  1. Разве UpdateItemSpec не разрешает несколько выражений обновления?
  2. Есть ли способ предоставить несколько операций SET?
  3. Если есть способБудут ли операции атомарными по природе?

1 Ответ

0 голосов
/ 03 июня 2018

Я нашел ответ на первый и второй вопрос.

Несколько выражений UpdateExpression не разрешены, но разделение каждой операции с помощью (,) в одном выражении updateExpression работает.

.withUpdateExpression("set #vsg_tid = :vsg_tidValue , #ttl = if_not_exists(#ttl,:ttlValue)")
...