

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
<a name="dynamodb-migrate-optimstic-locking"></a>

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.  | 
| Delete | 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. <pre>// 1. Read the item and get its current version.<br />Customer item = customerTable.getItem(Key.builder().partitionValue("someId").build());<br />AttributeValue currentVersion = item.getRecordVersion();<br /><br />// 2. Create conditional delete with the `currentVersion` value.<br />DeleteItemEnhancedRequest deleteItemRequest =<br />    DeleteItemEnhancedRequest.builder()<br />       .key(KEY)<br />       .conditionExpression(Expression.builder()<br />           .expression("recordVersion = :current_version_value")<br />           .putExpressionValue(":current_version_value", currentVersion)<br />           .build()).build();<br /><br />customerTable.deleteItem(deleteItemRequest);</pre>  | 
| 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.  | 