DynamoDB DeleteItem in Java (AWS SDK v2)
Ein Delete im AWS SDK for Java 2.x ist ein DeleteItemRequest mit dem vollständigen Primary Key, und ReturnValue.ALL_OLD sagt dir, ob überhaupt etwas da war.
Ergänze den Code unten um eine conditionExpression, und er entwickelt einen Bug, der trotzdem kompiliert. Der erste Stichpunkt unter dem Snippet ist dieser 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());
}
}
}Erklärung
ConditionalCheckFailedExceptionerweitertDynamoDbException— dercatch-Block oben schluckt also eine fehlgeschlagene Bedingung und gibt sie aus, als wäre der Dienst kaputt. Sobald die Anfrage eineconditionExpressionträgt, fange zuerst den engeren Typ. Eine Bedingung, die ihre Arbeit getan hat, ist ein Ergebnis, kein Fehler.- Die Exception trägt das unterlegene Item — setz
returnValuesOnConditionCheckFailure(ReturnValuesOnConditionCheckFailure.ALL_OLD)auf die Anfrage, unde.item()gibt dir die Zeile so zurück, wie DynamoDB sie gesehen hat. AWS nennt den Preis: "No read capacity units are consumed." attributes()gibt nienullzurück — ein Delete, das nichts getroffen hat, liefert eine leere Map,isEmpty()ist also die richtige Prüfung.hasAttributes()ist das, was „der Dienst hat nichts zurückgegeben" von „der Dienst hat eine leere Map zurückgegeben" trennt.- Das
ReturnValue-Enum ist mitUpdateItemgeteilt —returnValues(ReturnValue.ALL_NEW)kompiliert hier und kommt alsValidationExceptionzurück, denn "DeleteItemdoes not recognize any values other thanNONEorALL_OLD". DieString-Überladung des Builders verbirgt denselben Fehler (der vollständige Satz). - Eine Tabelle zu leeren ist kein API-Aufruf —
DeleteItemlöscht genau einen Key, und nichts im SDK löscht viele. Eine Tabelle zu truncaten ist einScannach Keys gefolgt von gebündelten Writes und verliert meist gegenDeleteTableplusCreateTable.
Mach es visuell
Wenn das Attribut, auf das du die Bedingung setzt, ein reserviertes Wort ist, braucht die Bedingung einen #-Alias. Der Reserved-Words-Checker sagt dir, welche deiner Attributnamen auf AWS' 573-Wörter-Liste stehen, und erzeugt für diese die expressionAttributeNames-Map.
DynoTable stellt ein Delete in einem Panel für ausstehende Änderungen bereit, bevor es die Tabelle erreicht. Cmd+Backspace stellt die ausgewählten Zeilen bereit, Cmd+Shift+Backspace löscht und committet in einem Zug, und alles Bereitgestellte lässt sich verwerfen. DynoTable herunterladen.
Verwandte Beispiele
- DynamoDB DeleteItem in Go — dasselbe Delete mit AWS SDK for Go v2.
- DynamoDB PutItem in Java — die Schreibseite desselben Keys.
- DynamoDB Condition Expressions — Deletes mit
attribute_existsund Wertprüfungen absichern. - DynamoDB ConditionalCheckFailedException — was ein fehlgeschlagenes bedingtes Delete auslöst und wann das erwartet ist.
Referenzen
- 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
Zuletzt verifiziert am 2026-07-28 gegen die oben verlinkte offizielle AWS-Dokumentation.