AWS SDK v2のDynamoDBで更新する項目が存在しない場合にエラーにしたい

はじめに

DynamoDBの書き込み操作には、putとupdateの2通りがある。
putでもupdateでも、項目が存在しない場合には新しい項目を登録する動きになるが、updateの時に更新する対象が存在しない場合にエラーにしたかった。

対処

まずは、対象の条件をExpressionで作成する。

Map<String, AttributeValue> expressionValues = new HashMap<>();
expressionValues.put(":PARTITION_KEY", AttributeValue.builder().s("hoge").build());
expressionValues.put(":SORT_KEY", AttributeValue.builder().s("fuga").build());

Expression expression = Expression.builder()
.expression("PARTITION_KEY = :PARTITION_KEY and SORT_KEY = :SORT_KEY")
.expressionValues(expressionValues).build();

あとは、DynamoDbEnhancedClientから作成したDynamoDbTableに対してupdate要求を行う。

table.updateItem(UpdateItemEnhancedRequest.builder(Item.class)
.conditionExpression(expression).item(item).build());

UpdateItemEnhancedRequestを作成し、conditionExpression()としてExpressionを渡せば良い。

これを実行すると、Expressionに合致する項目が存在しない場合、ConditionalCheckFailedExceptionがThrowされる。

感想

まだちゃんと使ってみていないが、これを駆使すればパーティションキーとソートキー以外の項目も条件に含めることができるのではないかと思った。そうすれば結構便利な機能なのかもしれない。

ちなみに、conditionExpressionはputでも指定することができた。

(そして、動かしてみるとupdateと同じ挙動をしているように見えた・・・。)

Copyright (C) 2018-2022 akagoma. All Rights Reserved.