web-dev-qa-db-ja.com

条件付き保存用のDynamoDBMapper

DynamoDBMapperを使用しており、ハッシュキーと範囲キーの組み合わせが存在しない場合にのみ条件付きで保存したいと思います。衝突の可能性を減らすためにUUIDを使用する方法があることは知っていますが、条件付き保存を使用して自分自身を保護したいと思います。

この記事 を使用する DynamoDBSaveExpression に遭遇しましたが、条件が「ハッシュキーAND範囲キー」であると指定できません。 [〜#〜] api [〜#〜]withConditionalOperatorメソッドを指定しますが、クラスでこれを確認できません。私は最新のaws Java sdk from here も使用しています。

条件付きで保存する方法について何か提案はありますか?または私が間違っている可能性がありますか?

15
n00b
_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
}
_

これは、内部的にsetExistsを呼び出すpublic ExpectedAttributeValue(Boolean exists)コンストラクターを使用します。

25
mkobit