Java'da (AWS SDK v2) DynamoDB DeleteItem
AWS SDK for Java 2.x'te bir silme, tam birincil anahtarı taşıyan bir DeleteItemRequest'tir ve ReturnValue.ALL_OLD size orada gerçekten bir şey olup olmadığını söyler.
Aşağıdaki koda bir conditionExpression ekleyin; yine de derlenen bir hata geliştirir. Parçacığın altındaki ilk madde işte o hatadır.
Kod
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());
}
}
}Açıklama
ConditionalCheckFailedException,DynamoDbException'ı genişletir — dolayısıyla yukarıdakicatchbloğu başarısız olmuş bir korumayı yutar ve sanki hizmet bozulmuş gibi yazdırır. İstek birconditionExpressiontaşımaya başladığı anda önce daha dar türü yakalayın. İşini yapmış bir koşul bir hata değil, bir sonuçtur.- İstisna, kaybeden öğeyi taşır — isteğe
returnValuesOnConditionCheckFailure(ReturnValuesOnConditionCheckFailure.ALL_OLD)koyun;e.item()size satırı DynamoDB'nin gördüğü hâliyle geri verir. AWS bedelini de söylüyor: "No read capacity units are consumed." attributes()aslanulldöndürmez — hiçbir şeyle eşleşmeyen bir silme boş bir eşleme verir, dolayısıyla testisEmpty()'dir. "Hizmet hiçbir şey döndürmedi" ile "hizmet boş bir eşleme döndürdü"yü ayıran şeyhasAttributes()'tır.ReturnValueenum'uUpdateItemile ortaktır —returnValues(ReturnValue.ALL_NEW)burada derlenir ve birValidationExceptionolarak geri döner, çünkü "DeleteItemdoes not recognize any values other thanNONEorALL_OLD". OluşturucununStringaşırı yüklemesi aynı hatayı gizler (tam küme).- Bir tabloyu boşaltmak bir API çağrısı değildir —
DeleteItemtam olarak bir anahtarı siler ve SDK'da çok sayıda öğeyi silen hiçbir şey yoktur. Bir tabloyu kırpmak, anahtarlar için birScanve ardından toplu yazmalardır ve genellikleDeleteTableartıCreateTable'a kaybeder.
Görsel olarak yapın
Koruma koyduğunuz öznitelik ayrılmış bir sözcükse, koşulun bir # takma adına ihtiyacı vardır. Ayrılmış sözcük denetleyicisi, öznitelik adlarınızdan hangilerinin AWS'nin 573 sözcüklük listesinde olduğunu söyler ve olanlar için expressionAttributeNames eşlemesini üretir.
DynoTable, bir silmeyi tabloya ulaşmadan önce bir Bekleyen değişiklikler panelinde hazırlar. Cmd+Backspace seçili satırları hazırlar, Cmd+Shift+Backspace tek hamlede siler ve işler, hazırlanan her şey de geri alınabilir. DynoTable'ı indirin.
İlgili örnekler
- Go'da DynamoDB DeleteItem — AWS SDK for Go v2 ile aynı silme.
- Java'da DynamoDB PutItem — aynı anahtarın yazma tarafı.
- DynamoDB koşul ifadeleri — silmeleri
attribute_existsve değer kontrolleriyle koruyun. - DynamoDB ConditionalCheckFailedException — başarısız bir koşullu silmenin fırlattığı şey ve bunun ne zaman beklendiği.
Kaynaklar
- 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
En son 2026-07-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.