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étendDynamoDbException— le bloccatchci-dessus avale donc une garde qui a échoué et l'affiche comme si le service était cassé. Dès que la requête porte uneconditionExpression, 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 ete.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 jamaisnull— une suppression qui n'a rien trouvé donne une map vide : le test, c'est doncisEmpty().hasAttributes()est ce qui distingue « le service n'a rien renvoyé » de « le service a renvoyé une map vide ».- L'enum
ReturnValueest partagé avecUpdateItem—returnValues(ReturnValue.ALL_NEW)compile ici et revient sous forme deValidationException, parce que "DeleteItemdoes not recognize any values other thanNONEorALL_OLD". La surchargeStringdu builder cache la même erreur (l'ensemble complet). - Vider une table n'est pas un appel d'API —
DeleteItemsupprime exactement une clé, et rien dans le SDK n'en supprime plusieurs. Tronquer une table, c'est unScanpour récupérer les clés suivi d'écritures batch, et ça perd généralement face àDeleteTableplusCreateTable.
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
- DynamoDB DeleteItem en Go — la même suppression avec l'AWS SDK for Go v2.
- DynamoDB PutItem en Java — le côté écriture de la même clé.
- Les expressions de condition DynamoDB — protéger les suppressions avec
attribute_existset des vérifications de valeur. - DynamoDB ConditionalCheckFailedException — ce que lève une suppression conditionnelle qui échoue, et quand c'est attendu.
Références
- DeleteItem — Amazon DynamoDB API Reference
- Use DeleteItem with an AWS SDK or CLI — Amazon DynamoDB Developer Guide
- DynamoDbClient — AWS SDK for Java 2.x API Reference
- DeleteItemRequest — AWS SDK for Java 2.x API Reference
- ConditionalCheckFailedException — AWS SDK for Java 2.x API Reference
- Condition expressions — Amazon DynamoDB Developer Guide
Dernière vérification le 2026-07-28 par rapport à la documentation officielle AWS liée ci-dessus.