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:SETatribui atributos (#upd0 = :updValue0defineGenre;#upd1 = :updValue1defineYear). Cada atributo recebe um alias viaexpressionAttributeNames, então palavras reservadas comoYearsão sempre seguras.ADDem um número faz um incremento atômico (ADD #upd2 :updValue2adiciona 1 aAwards) — seguro sob concorrência, sem race de read-modify-write.REMOVEapaga um atributo;DELETEremove elementos de um set.
expressionAttributeValues— o mapa:placeholder→AttributeValuetipado.returnValues(ReturnValue.ALL_NEW)— retorna o item completo após a atualização emresponse.attributes()(tambémUPDATED_NEW,ALL_OLD,UPDATED_OLDouNONE).- Semântica de upsert —
UpdateItemcria o item se a chave não existir. Adicione umaconditionExpression(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
- DynamoDB UpdateItem em Go — a mesma atualização com o AWS SDK for Go v2.
- DynamoDB PutItem em Java — substitua o item inteiro em vez disso.
- Update expressions do DynamoDB —
SET,ADD,REMOVE,DELETEe idiomas. - Entendendo ReturnValues — o que cada opção de
ReturnValuesfornece. - "Attribute name is a reserved keyword" — por que o mapa de aliases aqui não é opcional.
- Erros de sintaxe "Invalid UpdateExpression" — os erros comuns de sintaxe SET/ADD, decodificados.
References
- UpdateItem — Amazon DynamoDB API Reference
- Use UpdateItem with an AWS SDK or CLI — Amazon DynamoDB Developer Guide
- DynamoDbClient — AWS SDK for Java 2.x API Reference
- UpdateItemRequest — AWS SDK for Java 2.x API Reference
- Update expressions — Amazon DynamoDB Developer Guide
Última verificação em 2026-07-13 contra a documentação oficial da AWS vinculada acima.