DynamoDBMapper用于条件保存

时间:2015-01-22 04:41:01

标签: java amazon-web-services amazon-dynamodb

我正在使用DynamoDBMapper,并且当且仅当hashkey和range键组合不存在时才想有条件地保存。我知道有一些方法可以使用UUID来减少碰撞的可能性,但我想通过使用条件保存来保护自己。

我遇到使用this articleDynamoDBSaveExpression但是我无法指定条件是“hashkey AND rangekey”不能存在。 API指定了withConditionalOperator方法,但我无法在班上看到这一点。我正在使用来自here的最新aws java sdk。

有关如何有条件保存的任何建议?或者我可能做错了什么?

1 个答案:

答案 0 :(得分:23)

DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression();
Map<String, ExpectedAttributeValue> expectedAttributes = 
    ImmutableMap.<String, ExpectedAttributeValue>builder()
        .put("hashKey", new ExpectedAttributeValue(false))
        .put("rangeKey", new ExpectedAttributeValue(false))
        .build();
saveExpression.setExpected(expectedAttributes);
saveExpression.setConditionalOperator(ConditionalOperator.AND);
try {
    dynamoDBMapper.save(objectToSave, saveExpression);
} catch (ConditionalCheckFailedException e) {
    //Handle conditional check
}

这使用public ExpectedAttributeValue(Boolean exists)构造函数,它只是在内部调用setExists