DynamoDB DeleteItem em Java (AWS SDK v2)
Uma exclusão no AWS SDK for Java 2.x é um DeleteItemRequest carregando a chave primária completa, e ReturnValue.ALL_OLD te diz se havia mesmo alguma coisa lá.
Adicione um conditionExpression ao código abaixo e ele ganha um bug que continua compilando. O primeiro item da lista sob o trecho é esse bug.
Código
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());
}
}
}Explicação
ConditionalCheckFailedExceptionestendeDynamoDbException— então o blococatchacima engole uma guarda que falhou e a imprime como se o serviço tivesse quebrado. Assim que a requisição passa a carregar umconditionExpression, capture primeiro o tipo mais específico. Uma condição que fez o seu trabalho é um resultado, não um erro.- A exceção carrega o item perdedor — coloque
returnValuesOnConditionCheckFailure(ReturnValuesOnConditionCheckFailure.ALL_OLD)na requisição ee.item()devolve a linha como o DynamoDB a viu. A AWS informa o preço: "No read capacity units are consumed." attributes()nunca retornanull— uma exclusão que não correspondeu a nada devolve um mapa vazio, entãoisEmpty()é o teste.hasAttributes()é o que separa "o serviço não retornou nada" de "o serviço retornou um mapa vazio".- O enum
ReturnValueé compartilhado comUpdateItem—returnValues(ReturnValue.ALL_NEW)compila aqui e volta como umValidationException, porque "DeleteItemdoes not recognize any values other thanNONEorALL_OLD". A sobrecargaStringdo builder esconde o mesmo erro (o conjunto completo). - Esvaziar uma tabela não é uma chamada de API —
DeleteItemexclui exatamente uma chave, e nada no SDK exclui várias. Truncar uma tabela é umScanatrás das chaves seguido de escritas em lote, e normalmente perde paraDeleteTablemaisCreateTable.
Faça isso visualmente
Se o atributo no qual você se apoia para a guarda é uma palavra reservada, a condição precisa de um alias #. O verificador de palavras reservadas te diz quais dos seus nomes de atributo estão na lista de 573 palavras da AWS e gera o mapa expressionAttributeNames para os que estiverem.
O DynoTable prepara uma exclusão em um painel de alterações pendentes antes que ela chegue à tabela. Cmd+Backspace prepara as linhas selecionadas, Cmd+Shift+Backspace exclui e faz o commit de uma vez, e qualquer coisa preparada pode ser descartada. Baixe o DynoTable.
Exemplos relacionados
- DynamoDB DeleteItem em Go — a mesma exclusão com o AWS SDK for Go v2.
- DynamoDB PutItem em Java — o lado da escrita da mesma chave.
- Expressões de condição do DynamoDB — proteja exclusões com
attribute_existse verificações de valor. - DynamoDB ConditionalCheckFailedException — o que uma exclusão condicional malsucedida lança, e quando isso é esperado.
Referências
- 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
Verificado pela última vez em 2026-07-28 contra a documentação oficial da AWS vinculada acima.