2016-07-01 7 views
0

Es gibt mehrere Artikel darüber, wie bedingungsbedingte Validierung Ausnahme (zB: DynamoDBMapper save only if object doesn't exist) auf, wenn der Hash-Schlüssel ist doppelt oder übereinstimmend mit Ihren Kriterien, fragte sich, ob das gleiche für Bereichsschlüssel gilt.Dynamodb - Check Duplikat auf Bereichstaste

Ich habe lokal getestet und es wird kein Fehler ausgegeben.

Mein Ausdruck Logik speichern ist als unten

  DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression(); 
     Map<String, ExpectedAttributeValue> expectedAttributes = 
       ImmutableMap.<String, ExpectedAttributeValue>builder() 
         .put("range-key-column", 
          new ExpectedAttributeValue().withExists(false)) 
         .build(); 
     saveExpression.setExpected(expectedAttributes); 

Antwort

0

Es throw Ausnahme für mich tut. Während Sie den Speicheraufruf aufgerufen haben, haben Sie saveExpression als zweites Argument wie unten hinzugefügt.

1) Bitte beachten Sie, dass sowohl Hash- als auch Bereichsschlüssel beim Speichern der Daten gesetzt werden sollten. Wenn entweder der Hash-Schlüssel oder der Bereichsschlüssel nicht bereitgestellt wird, erhalten Sie eine Ausnahme.

Facebook_id - Raute-Taste Latitude - Rangetaste

 DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient); 

    Trail trail = new Trail(); 
    trail.setFacebook_id(hashKey); 
    trail.setLatitude(rangeKey); 
    trail.setLongitude("longupdate121"); 

    DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression(); 
    Map<String, ExpectedAttributeValue> expected = new HashMap<>(); 
    expected.put("latitude", 
      new ExpectedAttributeValue().withExists(false)); 

    saveExpression.setExpected(expected); 

    dynamoDBMapper.save(trail, saveExpression); 

com.amazonaws.services.dynamodbv2.model.ConditionalCheckFailedException: Die bedingte Anforderung ist fehlgeschlagen (Service: AmazonDynamoDBv2; Stand Code: 400; Fehlercode: ConditionalCheckFailedException; Request ID: 8e6d5842-d4b7-479b-8eb7-0a746e5fac48)

+0

Ist Ihr Hashkey verschiedenen s/w rec Ords, wenn Sie die ConditionalCheckFailedException bekommen? – Superaghu

+0

Ich stelle fest, dass, wenn der Hash-Schlüssel und der Bereichsschlüssel gleich sind und der saveExpression nur den zu prüfenden Bereichsschlüssel hat, die Validierungsausnahme ausgelöst wird. Wenn der Hash-Schlüssel jedoch unterschiedlich ist, aber der Bereichsschlüssel gleich ist, ist dies nicht der Fall. So verstehe ich, dass der Save-Ausdruck die Kombination von Hash + Range-Schlüssel überprüft, auch wenn Sie angewiesen haben, nur den Bereichsschlüssel für den Vergleich zu verwenden. – Superaghu