22

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

Illegal query expression: No hash key condition is found in the query という例外が発生します。

4

1 に答える 1

43

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);
于 2015-05-26T17:13:58.910 に答える