SDK for Java のバージョン 1 とバージョン 2 のオプティミスティックロックの違い - AWS SDK for Java 2.x

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SDK for Java のバージョン 1 とバージョン 2 のオプティミスティックロックの違い

V1 と V2 はどちらも、バージョン番号を保存する Bean クラス上の 1 つのプロパティをマークする属性注釈を持つオプティミスティックロックを実装します。

楽観的ロック動作の違い
V1 V2
Bean クラス注釈 @DynamoDBVersionAttribute @DynamoDbVersionAttribute (V2 は小文字の「b」を使用することに注意してください)
初期保存 バージョン番号属性を 1 に設定します。

で設定されたバージョン属性の開始値@DynamoDbVersionAttribute(startAt = X)。デフォルト値は 0 です。

更新 更新されるオブジェクトのバージョン番号がデータベース内の番号と一致することを条件チェックで検証すると、バージョン番号属性は 1 ずつ増加します。

更新されるオブジェクトのバージョン番号がデータベース内の番号と一致することを条件チェックで検証すると、バージョン番号属性が増分されます。

で設定されたincrementByオプションによって増分されるバージョン番号属性@DynamoDbVersionAttribute(incrementBy = X)。デフォルト値は 1 です。

削除 DynamoDBMapper は、削除されるオブジェクトのバージョン番号がデータベースのバージョン番号と一致するという条件付きチェックを追加します。

V2 は、削除オペレーションの条件を自動的に追加しません。削除動作を制御する場合は、条件式を手動で追加する必要があります。

次の例は、 Bean のバージョン属性recordVersionです。

// 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);
条件チェックによるトランザクション書き込み @DynamoDBVersionAttribute addConditionCheck メソッドで に注釈が付けられた Bean クラスを使用することはできません transactWriteItems リクエストのaddConditionCheckビルダーメソッドで、 @DynamoDbVersionAttribute注釈を持つ Bean クラスを使用できます
[無効] 列挙値を から に変更して、オプティミスティックロックUPDATEを無効にします DynamoDBMapperConfig.SaveBehaviorCLOBBER

@DynamoDbVersionAttribute 注釈を使用しないでください。