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

  • ConditionalCheckFailedException merupakan turunan DynamoDbException — jadi blok catch di atas menelan penjagaan yang gagal dan mencetaknya seolah-olah layanan yang rusak. Begitu permintaan membawa conditionExpression, 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 dan e.item() mengembalikan baris itu sebagaimana dilihat DynamoDB. AWS menyebut harganya: "No read capacity units are consumed."
  • attributes() tidak pernah mengembalikan null — delete yang tidak cocok dengan apa pun menghasilkan map kosong, jadi isEmpty() adalah ujiannya. hasAttributes() adalah yang memisahkan "layanan tidak mengembalikan apa pun" dari "layanan mengembalikan map kosong".
  • Enum ReturnValue dipakai bersama dengan UpdateItemreturnValues(ReturnValue.ALL_NEW) bisa dikompilasi di sini dan kembali sebagai ValidationException, karena "DeleteItem does not recognize any values other than NONE or ALL_OLD". Overload String pada builder menyembunyikan kesalahan yang sama (set lengkapnya).
  • Mengosongkan tabel bukanlah sebuah panggilan APIDeleteItem menghapus tepat satu key, dan tidak ada apa pun di SDK yang menghapus banyak sekaligus. Memangkas isi tabel adalah Scan untuk mengumpulkan key diikuti penulisan ber-batch, dan biasanya kalah dari DeleteTable plus CreateTable.

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

Referensi

Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.