Diferenças otimistas de bloqueio entre a versão 1 e a versão 2 do SDK for Java - AWS SDK for Java 2.x

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Diferenças otimistas de bloqueio entre a versão 1 e a versão 2 do SDK for Java

Tanto a V1 quanto a V2 implementam um bloqueio otimista com uma anotação de atributo que marca uma propriedade em sua classe de bean para armazenar o número da versão.

Diferenças no comportamento otimista de bloqueio
V1 V2
Anotação da classe Bean @DynamoDBVersionAttribute @DynamoDbVersionAttribute(observe que V2 usa um “b” minúsculo)
Salvamento inicial Atributo do número da versão definido como 1.

O valor inicial para o atributo de versão definido com@DynamoDbVersionAttribute(startAt = X). O valor padrão é 0.

Atualizar O atributo do número da versão será incrementado em 1 se a verificação condicional verificar se o número da versão do objeto que está sendo atualizado corresponde ao número no banco de dados.

O atributo do número da versão será incrementado se a verificação condicional verificar se o número da versão do objeto que está sendo atualizado corresponde ao número no banco de dados.

O atributo do número da versão incrementado pela incrementBy opção definida com@DynamoDbVersionAttribute(incrementBy = X). O valor padrão é 1.

Excluir DynamoDBMapperadiciona uma verificação condicional de que o número da versão do objeto que está sendo excluído corresponde ao número da versão no banco de dados.

A V2 não adiciona automaticamente condições para as operações de exclusão. Você deve adicionar expressões condicionais manualmente se quiser controlar o comportamento de exclusão.

No exemplo a seguir recordVersion está o atributo de versão do 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);
Gravação transacional com verificação de condição Você não pode usar uma classe de bean que esteja anotada @DynamoDBVersionAttribute em um addConditionCheck método. Você pode usar uma classe de bean com a @DynamoDbVersionAttribute anotação em um método addConditionCheck construtor para uma transactWriteItems solicitação.
Disable (Desabilitar) Desative o bloqueio otimista alterando o valor da DynamoDBMapperConfig.SaveBehavior enumeração de para. UPDATE CLOBBER

Não use a @DynamoDbVersionAttribute anotação.