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 ずつ増加します。

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

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

削除 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 クラスを使用できます
Disable (無効) 楽観的ロックを無効にするには、 DynamoDBMapperConfig.SaveBehavior 列挙値を UPDATE から CLOBBER に変更します。

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