私はDynamo DBに非常に慣れていません。これは非常に簡単な質問かもしれませんが、Dynamo DBのドキュメントとスタックオーバーフローの質問を調べましたが、DDBにクエリする方法を示す単一のリンクを見つけることができませんでした[〜#〜] gsi [〜#〜]ハッシュキーのみがあり、同じに範囲キーが指定されていません。
Illegal query expression:Hash key condition was not found in the queryという例外が発生します。
DynamoDBアノテーション付きモデルオブジェクトでは、@DynamoDBIndexHashKey(globalSecondaryIndexName = "gsiIndexName)
を使用して、GSIのハッシュキーであることを示す必要があります。
@DynamoDBTable(tableName = "myTable")
public class MyTable {
...
@DynamoDBIndexHashKey(globalSecondaryIndexName = "myGsi")
public String getGsiHk() {
return gsiHk;
}
...
}
次に、query
でDynamoDBMapper
メソッドを使用します。
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);