Dynamodb ConditionalCheckFailedException auf lese - / update-operation - java-sdk

Ich bin neu in DynamoDB und versuchen Sie ein Beispiel-Szenario mit der Transaktion unterstützen. Ich bin mit der gleichen Person in dynamodb-Transaktion Bibliothek. Nur der Unterschied ist ich habe ein Auswahl-Taste mit der Raute-Taste. Hier ist die definition der Tabelle:

  • ItemId --> hash-Schlüssel , string -
  • ItemName --> Bereich key, string

@DynamoDBTable(tableName = "Item")
public static class ExampleItem {
    private String itemId;
    private String value;
    private String itemName;
    private Long version;
    @DynamoDBHashKey(attributeName = "ItemId")
    public String getItemId() {
        return itemId;
    }
    public void setItemId(String itemId) {
        this.itemId = itemId;
    }
    @DynamoDBRangeKey(attributeName="ItemName")
    public String getItemName() {
        return itemName;
    }
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    @DynamoDBVersionAttribute
    public Long getVersion() {
        return version;
    }
    public void setVersion(Long version) {
        this.version = version;
    }
}

Wie Sie sehen können, bin ich mit dem version-Attribut als gut.
Nun, ich versuche zum ausführen einer einfachen create-oder update-Szenario mit der Transaktion/dbmapper. Hier der code-snippet.

Transaction t1 = txManager.newTransaction();
ExampleItem keyItem = new ExampleItem();
keyItem.setItemId("Item1");
keyItem.setItemName("USA");
ExampleItem item = t1.load(keyItem);
if (item != null) {
    item.setValue("Magenta");
    item.setItemName("UK");
    t1.save(item);
} else {
    item = new ExampleItem();
    item.setItemId(keyItem.getItemId());
    item.setItemName("USA");
    item.setValue("Violet");
    t1.save(item);
}
t1.commit();
t1.delete();

Ich bin in der Lage, um den Datensatz hinzufügen, ohne jede Frage, aber ich habe da ein problem, wenn ich versuche zu Lesen, das erfassen und zu aktualisieren jedes Attribut. Ich bin immer folgende exception:

Uncaught exception:com.amazonaws.services.dynamodbv2.model.ConditionalCheckFailedException: Status Code: 0, AWS Service: null, AWS Request ID: null, AWS Error Code: null, AWS Error Message: Item {ItemId={S: Item1,}, ItemName={S: UK,}} had unexpected attributes: Status Code: 0, AWS Service: null, AWS Request ID: null, AWS Error Code: null, AWS Error Message: expected attribute(s) {version={Value: {N: 1,},Exists: true}} but found null
com.amazonaws.services.dynamodbv2.model.ConditionalCheckFailedException: Status Code: 0, AWS Service: null, AWS Request ID: null, AWS Error Code: null, AWS Error Message: Item {ItemId={S: Item1,}, ItemName={S: UK,}} had unexpected attributes: Status Code: 0, AWS Service: null, AWS Request ID: null, AWS Error Code: null, AWS Error Message: expected attribute(s) {version={Value: {N: 1,},Exists: true}} but found null

Sieht aus wie es hat etwas zu tun mit der version, aber Sie wissen nicht, wo mache ich falsch. Jegliche Hinweise werden dankbar angenommen.

Dank

Shamik

  • gefunden jedes Ding, das hilfreich?
InformationsquelleAutor Shamik | 2014-10-23
Schreibe einen Kommentar