Java용 SDK 버전 1과 버전 2의 낙관적 잠금 차이점 - AWS SDK for Java 2.x

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Java용 SDK 버전 1과 버전 2의 낙관적 잠금 차이점

V1과 V2 모두 Bean 클래스에 하나의 속성을 표시하여 버전 번호를 저장하는 속성 주석으로 낙관적 잠금을 구현합니다.

낙관적 잠금 동작의 차이점
V1 V2
빈 클래스 주석 @DynamoDBVersionAttribute @DynamoDbVersionAttribute (V2는 소문자 "b"를 사용합니다.)
초기 저장 버전 번호 속성을 1로 설정합니다.

로 설정된 버전 속성의 시작 값입니다@DynamoDbVersionAttribute(startAt = X). 기본값은 0입니다.

업데이트 조건부 확인에서 업데이트 중인 객체의 버전 번호가 데이터베이스의 번호와 일치하는지 확인하면 버전 번호 속성이 1씩 증가합니다.

조건부 확인에서 업데이트 중인 객체의 버전 번호가 데이터베이스의 번호와 일치하는지 확인하면 버전 번호 속성이 증가합니다.

로 설정된 incrementBy 옵션에 따라 증가하는 버전 번호 속성입니다@DynamoDbVersionAttribute(incrementBy = X). 기본값은 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에서 주석이 달린 빈 클래스는 사용할 수 없습니다. transactWriteItems 요청에 대한 addConditionCheck빌더 메서드에서 @DynamoDbVersionAttribute 주석과 함께 빈 클래스를 사용할 있습니다.
비활성화 열거 값을에서 로 변경 DynamoDBMapperConfig.SaveBehavior하여 낙관적 잠금UPDATE을 비활성화합니다CLOBBER.

@DynamoDbVersionAttribute 주석을 사용하지 마십시오.