

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 適用於 Java 的 SDK 第 1 版和第 2 版之間的樂觀鎖定差異
<a name="dynamodb-migrate-optimstic-locking"></a>

V1 和 V2 都實作樂觀鎖定搭配屬性註釋，在您的 Bean 類別上標記一個屬性來存放版本號碼。


**樂觀鎖定行為的差異**  

|  | V1 | V2 | 
| --- | --- | --- | 
| Bean 類別註釋 | @DynamoDBVersionAttribute | @DynamoDbVersionAttribute （請注意，V2 使用小寫 "b") | 
| 初始儲存 | 版本編號屬性設定為 1。 |  使用 設定的版本屬性的起始值`@DynamoDbVersionAttribute(startAt = X)`。預設值為 0。  | 
| 更新 | 如果條件式檢查驗證要更新的物件版本編號符合資料庫中的編號，則版本編號屬性會遞增 1。 |  如果條件式檢查驗證要更新的物件版本編號符合資料庫中的編號，則版本編號屬性會遞增。 使用 設定`incrementBy`的選項遞增的版本編號屬性`@DynamoDbVersionAttribute(incrementBy = X)`。預設值為 1。  | 
| 刪除 | DynamoDBMapper 新增條件式檢查，確認要刪除之物件的版本編號符合資料庫中的版本編號。 |  V2 不會自動新增刪除操作的條件。如果您想要控制刪除行為，則必須手動新增條件表達式。 在下列範例中， `recordVersion`是 Bean 的版本屬性。 <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>  | 
| 具有條件檢查的交易寫入 | 您無法在 addConditionCheck方法@DynamoDBVersionAttribute中使用以 標註的 Bean 類別。 | 您可以在transactWriteItems請求的addConditionCheck建置器方法中使用具有 @DynamoDbVersionAttribute註釋的 Bean 類別。 | 
| 停用 | 透過將 DynamoDBMapperConfig.SaveBehavior列舉值從 變更為 UPDATE來停用樂觀鎖定CLOBBER。 |  請勿使用 `@DynamoDbVersionAttribute`註釋。  | 