用于条件保存的 DynamoDBMapper

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

我遇到了这篇使用 DynamoDBSaveExpression 的文章,但是我无法指定条件是“哈希键和范围键”不存在。API 指定了一个方法,但我无法在我的类中看到它。我也从这里使用最新的aws java开发工具包withConditionalOperator

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


答案 1
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


答案 2

推荐