Perbedaan penguncian optimis antara versi 1 dan versi 2 dari SDK for Java - AWS SDK for Java 2.x

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Perbedaan penguncian optimis antara versi 1 dan versi 2 dari SDK for Java

Baik V1 dan V2 menerapkan penguncian optimis dengan anotasi atribut yang menandai satu properti di kelas kacang Anda untuk menyimpan nomor versi.

Perbedaan perilaku penguncian yang optimis
V1 V2
Anotasi kelas kacang @DynamoDBVersionAttribute @DynamoDbVersionAttribute(perhatikan bahwa V2 menggunakan huruf kecil “b”)
Simpan awal Atribut nomor versi disetel ke 1.

Nilai awal untuk atribut versi ditetapkan dengan@DynamoDbVersionAttribute(startAt = X). Nilai default-nya adalah 0.

Perbarui Atribut nomor versi bertambah 1 jika pemeriksaan bersyarat memverifikasi bahwa nomor versi objek yang diperbarui cocok dengan nomor dalam database.

Atribut nomor versi bertambah jika pemeriksaan bersyarat memverifikasi bahwa nomor versi objek yang diperbarui cocok dengan nomor dalam database.

Atribut nomor versi ditambah dengan incrementBy opsi yang ditetapkan dengan@DynamoDbVersionAttribute(incrementBy = X). Nilai default adalah 1.

Hapus DynamoDBMappermenambahkan pemeriksaan bersyarat bahwa nomor versi objek yang dihapus cocok dengan nomor versi dalam database.

V2 tidak tidak secara otomatis menambahkan kondisi untuk operasi penghapusan. Anda harus menambahkan ekspresi kondisi secara manual jika Anda ingin mengontrol perilaku hapus.

Dalam contoh berikut recordVersion adalah atribut versi kacang.

// 1. Read the item and get its current version. Customer item = customerTable.getItem(Key.builder().partitionValue("someId").build()); AttributeValue currentVersion = item.getRecordVersion(); // 2. Create conditional delete with the `currentVersion` value. DeleteItemEnhancedRequest deleteItemRequest = DeleteItemEnhancedRequest.builder() .key(KEY) .conditionExpression(Expression.builder() .expression("recordVersion = :current_version_value") .putExpressionValue(":current_version_value", currentVersion) .build()).build(); customerTable.deleteItem(deleteItemRequest);
Tulis Transaksional dengan Pemeriksaan Kondisi Anda tidak dapat menggunakan kelas kacang yang dianotasi dengan @DynamoDBVersionAttribute metode. addConditionCheck Anda dapat menggunakan kelas kacang dengan @DynamoDbVersionAttribute anotasi dalam metode addConditionCheck pembangun untuk transactWriteItems permintaan.
Nonaktifkan Nonaktifkan penguncian optimis dengan mengubah nilai DynamoDBMapperConfig.SaveBehavior enumerasi dari ke. UPDATE CLOBBER

Jangan gunakan @DynamoDbVersionAttribute anotasi.