DynamoDB DeleteItem di Java (AWS SDK v2)
Sebuah delete di AWS SDK for Java 2.x adalah DeleteItemRequest yang membawa primary key lengkap, dan ReturnValue.ALL_OLD memberi tahu Anda apakah memang ada sesuatu di sana.
Tambahkan conditionExpression ke kode di bawah dan ia melahirkan bug yang tetap bisa dikompilasi. Butir pertama di bawah cuplikan itu adalah bug tersebut.
Kode
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());
}
}
}Penjelasan
ConditionalCheckFailedExceptionmerupakan turunanDynamoDbException— jadi blokcatchdi atas menelan penjagaan yang gagal dan mencetaknya seolah-olah layanan yang rusak. Begitu permintaan membawaconditionExpression, tangkap tipe yang lebih sempit lebih dulu. Kondisi yang bekerja sebagaimana mestinya adalah sebuah hasil, bukan sebuah error.- Exception itu membawa item yang kalah — pasang
returnValuesOnConditionCheckFailure(ReturnValuesOnConditionCheckFailure.ALL_OLD)pada permintaan dane.item()mengembalikan baris itu sebagaimana dilihat DynamoDB. AWS menyebut harganya: "No read capacity units are consumed." attributes()tidak pernah mengembalikannull— delete yang tidak cocok dengan apa pun menghasilkan map kosong, jadiisEmpty()adalah ujiannya.hasAttributes()adalah yang memisahkan "layanan tidak mengembalikan apa pun" dari "layanan mengembalikan map kosong".- Enum
ReturnValuedipakai bersama denganUpdateItem—returnValues(ReturnValue.ALL_NEW)bisa dikompilasi di sini dan kembali sebagaiValidationException, karena "DeleteItemdoes not recognize any values other thanNONEorALL_OLD". OverloadStringpada builder menyembunyikan kesalahan yang sama (set lengkapnya). - Mengosongkan tabel bukanlah sebuah panggilan API —
DeleteItemmenghapus tepat satu key, dan tidak ada apa pun di SDK yang menghapus banyak sekaligus. Memangkas isi tabel adalahScanuntuk mengumpulkan key diikuti penulisan ber-batch, dan biasanya kalah dariDeleteTableplusCreateTable.
Lakukan secara visual
Jika atribut yang Anda jadikan penjaga adalah kata reserved, kondisinya butuh alias #. Pemeriksa reserved word memberi tahu nama atribut Anda yang mana yang duduk di daftar 573 kata milik AWS dan menghasilkan map expressionAttributeNames untuk yang memang begitu.
DynoTable menaruh sebuah delete ke panel Pending changes sebelum ia mencapai tabel. Cmd+Backspace menaruh baris terpilih ke antrean, Cmd+Shift+Backspace menghapus dan melakukan commit sekaligus, dan apa pun yang sudah diantrekan bisa dibatalkan. Unduh DynoTable.
Contoh terkait
- DynamoDB DeleteItem di Go — delete yang sama dengan AWS SDK for Go v2.
- DynamoDB PutItem di Java — sisi penulisan dari key yang sama.
- Condition expression DynamoDB — jaga delete dengan
attribute_existsdan pemeriksaan nilai. - DynamoDB ConditionalCheckFailedException — apa yang dilemparkan delete bersyarat yang gagal, dan kapan itu memang diharapkan.
Referensi
- 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
Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.