web-dev-qa-db-ja.com

DynamoDBMapperを使用して、hashKeysのみでGSIを持つDynamo DBをクエリする方法

私はDynamo DBに非常に慣れていません。これは非常に簡単な質問かもしれませんが、Dynamo DBのドキュメントとスタックオーバーフローの質問を調べましたが、DDBにクエリする方法を示す単一のリンクを見つけることができませんでした[〜#〜] gsi [〜#〜]ハッシュキーのみがあり、同じに範囲キーが指定されていません。

Illegal query expression:Hash key condition was not found in the queryという例外が発生します。

16
Ankit Banerjee

DynamoDBアノテーション付きモデルオブジェクトでは、@DynamoDBIndexHashKey(globalSecondaryIndexName = "gsiIndexName)を使用して、GSIのハッシュキーであることを示す必要があります。

@DynamoDBTable(tableName = "myTable")
public class MyTable {
    ...

    @DynamoDBIndexHashKey(globalSecondaryIndexName = "myGsi")
    public String getGsiHk() {
        return gsiHk;
    }

    ...
}

次に、queryDynamoDBMapperメソッドを使用します。

final MyTable gsiKeyObj = new MyTable();
gsiKeyObj.setGsiHk("myGsiHkValue");
final DynamoDBQueryExpression<MyTable> queryExpression = 
    new DynamoDBQueryExpression<>();
queryExpression.setHashKeyValues(gsiKeyObj);
queryExpression.setIndexName("myGsi");
queryExpression.setConsistentRead(false);   // cannot use consistent read on GSI
final PaginatedQueryList<MyTable> results = 
    mapper.query(MyTable.class, queryExpression);
35
mkobit