DynamoDB DeleteItem en Java (AWS SDK v2)

Une suppression dans l'AWS SDK for Java 2.x, c'est un DeleteItemRequest portant la clé primaire complète, et ReturnValue.ALL_OLD te dit s'il y avait effectivement quelque chose.

Ajoute une conditionExpression au code ci-dessous et il développe un bug qui compile quand même. Le premier point sous le snippet, c'est ce bug.

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.DeleteItemRequest;
import software.amazon.awssdk.services.dynamodb.model.DeleteItemResponse;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.model.ReturnValue;

public class DeleteItemExample {
    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());

            DeleteItemRequest request = DeleteItemRequest.builder()
                    .tableName("Music")
                    .key(key)
                    .returnValues(ReturnValue.ALL_OLD)
                    .build();

            DeleteItemResponse response = ddb.deleteItem(request);
            if (response.attributes().isEmpty()) {
                System.out.println("No item with that key existed");
            } else {
                System.out.println("Deleted: " + response.attributes());
            }
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
        }
    }
}

Explication

  • ConditionalCheckFailedException étend DynamoDbException — le bloc catch ci-dessus avale donc une garde qui a échoué et l'affiche comme si le service était cassé. Dès que la requête porte une conditionExpression, attrape d'abord le type le plus précis. Une condition qui a fait son travail est un résultat, pas une erreur.
  • L'exception transporte l'élément perdant — mets returnValuesOnConditionCheckFailure(ReturnValuesOnConditionCheckFailure.ALL_OLD) sur la requête et e.item() te rend la ligne telle que DynamoDB l'a vue. AWS en annonce le prix : "No read capacity units are consumed."
  • attributes() ne renvoie jamais null — une suppression qui n'a rien trouvé donne une map vide : le test, c'est donc isEmpty(). hasAttributes() est ce qui distingue « le service n'a rien renvoyé » de « le service a renvoyé une map vide ».
  • L'enum ReturnValue est partagé avec UpdateItemreturnValues(ReturnValue.ALL_NEW) compile ici et revient sous forme de ValidationException, parce que "DeleteItem does not recognize any values other than NONE or ALL_OLD". La surcharge String du builder cache la même erreur (l'ensemble complet).
  • Vider une table n'est pas un appel d'APIDeleteItem supprime exactement une clé, et rien dans le SDK n'en supprime plusieurs. Tronquer une table, c'est un Scan pour récupérer les clés suivi d'écritures batch, et ça perd généralement face à DeleteTable plus CreateTable.

Le faire visuellement

Si l'attribut sur lequel porte ta garde est un mot réservé, la condition a besoin d'un alias #. Le vérificateur de mots réservés te dit lesquels de tes noms d'attributs figurent sur la liste de 573 mots d'AWS et génère la map expressionAttributeNames pour ceux qui y sont.

DynoTable place une suppression dans un panneau de modifications en attente avant qu'elle n'atteigne la table. Cmd+Backspace met les lignes sélectionnées en attente, Cmd+Shift+Backspace supprime et valide d'un seul geste, et tout ce qui est en attente peut être abandonné. Télécharge DynoTable.

Exemples liés

Références

Dernière vérification le 2026-07-28 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

Un client de bureau rapide pour DynamoDB qui exécute le vrai SQL que DynamoDB ne peut pas — JOINs, GROUP BY, agrégations — avec édition visuelle et un agent IA sur tes propres clés Bedrock.

Essai gratuit de 30 jours, sans carte bancaire — ensuite la formule Gratuit, sans limite de durée.