

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

# SDK for Java のバージョン 1 とバージョン 2 の楽観的ロックの違い
<a name="dynamodb-migrate-optimstic-locking"></a>

V1 と V2 の両方で、Bean クラス内の 1 つのプロパティにバージョン番号を保存するための属性アノテーションを付与することで、楽観的ロックが実装されています。


**楽観的ロック動作の違い**  

|  | V1 | V2 | 
| --- | --- | --- | 
| Bean クラスの注釈 | @DynamoDBVersionAttribute | @DynamoDbVersionAttribute (V2 は小文字の「b」を使用することに注意してください) | 
| 初期保存 | 1 に設定されたバージョン番号属性。 |  `@DynamoDbVersionAttribute(startAt = X)` で設定されたバージョン属性の開始値。デフォルト値は 0 です。  | 
| 更新 | 更新されるオブジェクトのバージョン番号がデータベース内の番号と一致することが条件チェックで検証されると、バージョン番号属性が 1 ずつ増加します。 |  更新されるオブジェクトのバージョン番号がデータベース内の番号と一致することが条件チェックで検証されると、バージョン番号属性が増加します。 `@DynamoDbVersionAttribute(incrementBy = X)` で設定された `incrementBy` オプションによって増加するバージョン番号属性。デフォルト値は 1 です。  | 
| Delete | 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` 注釈を使用しないでください。  | 