Optimistische Sperrunterschiede zwischen Version 1 und Version 2 des SDK for Java - AWS SDK for Java 2.x

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Optimistische Sperrunterschiede zwischen Version 1 und Version 2 des SDK for Java

Sowohl V1 als auch V2 implementieren optimistisches Sperren mit einer Attributanmerkung, die eine Eigenschaft in Ihrer Bean-Klasse markiert, um die Versionsnummer zu speichern.

Unterschiede im optimistischen Sperrverhalten
V1 V2
Anmerkung zur Bean-Klasse @DynamoDBVersionAttribute @DynamoDbVersionAttribute(Beachten Sie, dass V2 ein kleingeschriebenes „b“ verwendet)
Erstes Speichern Das Versionsnummer-Attribut ist auf 1 gesetzt.

Der Startwert für das auf festgelegte Versionsattribut@DynamoDbVersionAttribute(startAt = X). Der Standardwert ist 0.

Aktualisierung Das Versionsnummernattribut wird um 1 erhöht, wenn die bedingte Prüfung sicherstellt, dass die Versionsnummer des zu aktualisierenden Objekts mit der Nummer in der Datenbank übereinstimmt.

Das Versionsnummernattribut wird erhöht, wenn bei der bedingten Überprüfung überprüft wird, ob die Versionsnummer des zu aktualisierenden Objekts mit der Nummer in der Datenbank übereinstimmt.

Das Versionsnummernattribut wird um die mit festgelegte incrementBy Option erhöht. @DynamoDbVersionAttribute(incrementBy = X) Der Standardwert ist 1.

Löschen DynamoDBMapperfügt eine bedingte Überprüfung hinzu, ob die Versionsnummer des gelöschten Objekts mit der Versionsnummer in der Datenbank übereinstimmt.

V2 fügt nicht automatisch Bedingungen für die Löschvorgänge hinzu. Sie müssen Bedingungsausdrücke manuell hinzufügen, wenn Sie das Löschverhalten steuern möchten.

Im folgenden Beispiel recordVersion ist das Versionsattribut der Bean dargestellt.

// 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);
Transaktionales Schreiben mit einer Zustandsprüfung Sie können eine Bean-Klasse, die mit einer Anmerkung versehen ist, nicht @DynamoDBVersionAttribute in einer Methode verwenden. addConditionCheck Sie können eine Bean-Klasse mit der @DynamoDbVersionAttribute Anmerkung in einer addConditionCheck Builder-Methode für eine transactWriteItems Anfrage verwenden.
Deaktivieren Deaktivieren Sie optimistisches Sperren, indem Sie den DynamoDBMapperConfig.SaveBehavior Aufzählungswert von UPDATE bis CLOBBER ändern.

Verwenden Sie die @DynamoDbVersionAttribute Anmerkung nicht.