適用於 Java 的 SDK 第 1 版和第 2 版之間的樂觀鎖定差異 - AWS SDK for Java 2.x

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

適用於 Java 的 SDK 第 1 版和第 2 版之間的樂觀鎖定差異

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

樂觀鎖定行為的差異
V1 V2
Bean 類別註釋 @DynamoDBVersionAttribute @DynamoDbVersionAttribute (請注意,V2 使用小寫 "b")
初始儲存 版本編號屬性設定為 1。

使用 設定的版本屬性的起始值@DynamoDbVersionAttribute(startAt = X)。預設值為 0。

更新 如果條件式檢查確認要更新的物件版本編號符合資料庫中的編號,則版本編號屬性會遞增 1。

如果條件式檢查驗證要更新的物件版本編號符合資料庫中的編號,則版本編號屬性會遞增。

使用 設定incrementBy的選項遞增的版本編號屬性@DynamoDbVersionAttribute(incrementBy = X)。預設值為 1。

Delete DynamoDBMapper 新增條件式檢查,確認要刪除之物件的版本編號符合資料庫中的版本編號。

V2 不會自動新增刪除操作的條件。如果您想要控制刪除行為,則必須手動新增條件表達式。

在下列範例中, recordVersion是 Bean 的版本屬性。

// 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);
具有條件檢查的交易寫入 您無法addConditionCheck方法@DynamoDBVersionAttribute中使用以 標註的 Bean 類別。 您可以在transactWriteItems請求的addConditionCheck建置器方法中使用具有 @DynamoDbVersionAttribute註釋的 Bean 類別。
停用 透過將 DynamoDBMapperConfig.SaveBehavior列舉值從 變更為 UPDATE 來停用樂觀鎖定CLOBBER

請勿使用 @DynamoDbVersionAttribute註釋。