DynamoDB UpdateItem em Java (AWS SDK v2)

UpdateItem altera atributos específicos de um item (e cria o item se ele não existir), deixando todo o resto intacto. No AWS SDK for Java 2.x você constrói um UpdateItemRequest com uma updateExpression.

Code

import java.util.HashMap;
import java.util.Map;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.model.ReturnValue;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemResponse;

public class UpdateItemExample {
    public static void main(String[] args) {
        try (DynamoDbClient ddb = DynamoDbClient.builder()
                .region(Region.US_EAST_1)
                .build()) {

            Map<String, AttributeValue> key = new HashMap<>();
            key.put("Artist", AttributeValue.builder().s("Arturo Sandoval").build());
            key.put("SongTitle", AttributeValue.builder().s("Cubano Chant").build());

            Map<String, String> names = new HashMap<>();
            names.put("#upd0", "Genre");
            names.put("#upd1", "Year");
            names.put("#upd2", "Awards");

            Map<String, AttributeValue> values = new HashMap<>();
            values.put(":updValue0", AttributeValue.builder().s("Latin Jazz").build());
            values.put(":updValue1", AttributeValue.builder().n("1994").build());
            values.put(":updValue2", AttributeValue.builder().n("1").build());

            UpdateItemRequest request = UpdateItemRequest.builder()
                    .tableName("Music")
                    .key(key)
                    .updateExpression("SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2")
                    .expressionAttributeNames(names)
                    .expressionAttributeValues(values)
                    .returnValues(ReturnValue.ALL_NEW)
                    .build();

            UpdateItemResponse response = ddb.updateItem(request);
            System.out.println(response.attributes()); // the item after the update
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
        }
    }
}

Explicação

  • key — a chave primária completa do item a atualizar.
  • updateExpression — uma ou mais cláusulas:
    • SET atribui atributos (#upd0 = :updValue0 define Genre; #upd1 = :updValue1 define Year). Cada atributo recebe um alias via expressionAttributeNames, então palavras reservadas como Year são sempre seguras.
    • ADD em um número faz um incremento atômico (ADD #upd2 :updValue2 adiciona 1 a Awards) — seguro sob concorrência, sem race de read-modify-write. REMOVE apaga um atributo; DELETE remove elementos de um set.
  • expressionAttributeValues — o mapa :placeholderAttributeValue tipado.
  • returnValues(ReturnValue.ALL_NEW) — retorna o item completo após a atualização em response.attributes() (também UPDATED_NEW, ALL_OLD, UPDATED_OLD ou NONE).
  • Semântica de upsertUpdateItem cria o item se a chave não existir. Adicione uma conditionExpression (por exemplo, attribute_exists(Artist)) para atualizar somente.
  • Prefira uma update expression ao invés do mapa legado attributeUpdates — expressões suportam múltiplas cláusulas, aliases e condições em uma única requisição.

Faça visualmente

O DynamoDB Expression Builder constrói cláusulas SET / ADD / REMOVE com os mapas de nome/valor e copia código executável.

Para editar itens numa GUI — altere um campo, revise a UpdateExpression gerada, copie o código — baixe o DynoTable.

Exemplos relacionados

References

Última verificação em 2026-07-13 contra a documentação oficial da AWS vinculada acima.

Trabalhe com o DynamoDB sem o Console

O DynoTable é um cliente desktop rápido para o DynamoDB — navegue pelas tabelas, execute consultas no estilo SQL e edite itens localmente.