DynamoDB UpdateItem en Java (AWS SDK v2)

UpdateItem cambia atributos concretos de un item (y crea el item si no existe), dejando intacto todo lo demás. En AWS SDK para Java 2.x construyes un UpdateItemRequest con un 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());
        }
    }
}

Explicación

  • key — la clave primaria completa del item a actualizar.
  • updateExpression — una o más cláusulas:
    • SET asigna atributos (#upd0 = :updValue0 establece Genre; #upd1 = :updValue1 establece Year). Cada atributo lleva un alias mediante expressionAttributeNames, así que palabras reservadas como Year están siempre a salvo.
    • ADD sobre un número hace un incremento atómico (ADD #upd2 :updValue2 suma 1 a Awards) — seguro bajo concurrencia, sin condición de carrera de lectura-modificación-escritura. REMOVE elimina un atributo; DELETE quita elementos de un conjunto.
  • expressionAttributeValues — el mapa :placeholderAttributeValue tipado.
  • returnValues(ReturnValue.ALL_NEW) — devuelve el item completo tras la actualización en response.attributes() (también UPDATED_NEW, ALL_OLD, UPDATED_OLD o NONE).
  • Semántica de upsertUpdateItem crea el item si la clave no existe. Añade un conditionExpression (por ejemplo, attribute_exists(Artist)) para actualizar solo.
  • Prefiere una expresión de actualización antes que el mapa heredado attributeUpdates — las expresiones admiten varias cláusulas, alias y condiciones en una sola solicitud.

Hazlo visualmente

El DynamoDB Expression Builder construye cláusulas SET / ADD / REMOVE con los mapas de nombres/valores y copia código ejecutable.

Para editar items en una interfaz gráfica — cambia un campo, revisa el UpdateExpression generado, copia el código — descarga DynoTable.

Ejemplos relacionados

References

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.