DynamoDB DeleteItem in Java (AWS SDK v2)
Un'eliminazione in AWS SDK for Java 2.x è un DeleteItemRequest che porta con sé la chiave primaria completa, e ReturnValue.ALL_OLD ti dice se c'era davvero qualcosa.
Aggiungi una conditionExpression al codice qui sotto e sviluppa un bug che compila comunque. Il primo punto elenco sotto lo snippet è quel bug.
Codice
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());
}
}
}Spiegazione
ConditionalCheckFailedExceptionestendeDynamoDbException— quindi il bloccocatchqui sopra inghiotte una guardia fallita e la stampa come se il servizio si fosse rotto. Non appena la richiesta porta unaconditionExpression, intercetta prima il tipo più specifico. Una condizione che ha fatto il suo lavoro è un esito, non un errore.- L'eccezione porta con sé l'Item perdente — metti
returnValuesOnConditionCheckFailure(ReturnValuesOnConditionCheckFailure.ALL_OLD)sulla richiesta ee.item()ti restituisce la riga così come l'ha vista DynamoDB. AWS dichiara il prezzo: "No read capacity units are consumed." attributes()non restituisce mainull— un'eliminazione che non ha trovato nulla produce una mappa vuota, quindi il test èisEmpty(). ÈhasAttributes()a separare «il servizio non ha restituito nulla» da «il servizio ha restituito una mappa vuota».- L'enum
ReturnValueè condiviso conUpdateItem—returnValues(ReturnValue.ALL_NEW)qui compila e torna indietro comeValidationException, perché "DeleteItemdoes not recognize any values other thanNONEorALL_OLD". L'overloadStringdel builder nasconde lo stesso errore (l'insieme completo). - Svuotare una tabella non è una chiamata API —
DeleteItemelimina esattamente una chiave, e nulla nell'SDK ne elimina molte. Troncare una tabella è unoScanper le chiavi seguito da scritture in batch, e di solito perde controDeleteTablepiùCreateTable.
Fallo visivamente
Se l'attributo su cui metti la guardia è una parola riservata, la condizione ha bisogno di un alias #. Il verificatore delle parole riservate ti dice quali dei tuoi nomi di attributo stanno sulla lista di 573 parole di AWS e genera la mappa expressionAttributeNames per quelli che ci sono.
DynoTable mette un'eliminazione in staging in un pannello Modifiche in sospeso prima che raggiunga la tabella. Cmd+Backspace mette in staging le righe selezionate, Cmd+Shift+Backspace elimina e fa commit in un colpo solo, e tutto ciò che è in staging può essere scartato. Scarica DynoTable.
Esempi correlati
- DynamoDB DeleteItem in Go — la stessa eliminazione con AWS SDK for Go v2.
- DynamoDB PutItem in Java — il lato scrittura della stessa chiave.
- Condition expression di DynamoDB — proteggi le eliminazioni con
attribute_existse controlli sui valori. - DynamoDB ConditionalCheckFailedException — cosa solleva un'eliminazione condizionale fallita, e quando è attesa.
Riferimenti
- 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
Ultima verifica 2026-07-28 rispetto alla documentazione ufficiale AWS collegata sopra.