22

我对Dynamo DB很陌生,可能这是一个非常微不足道的问题,但我浏览了 Dynamo DB 的文档和堆栈溢出问题,但我找不到一个链接,它告诉我如何查询 DDB 以获取只有散列键的GSI和没有为相同的指定范围键。

我得到异常 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 回答