如何使用 DynamoDBMapper 查询具有仅具有 hashKeys 的 GSI 的 Dynamo DB

How to query a Dynamo DB having a GSI with only hashKeys using DynamoDBMapper

我是 Dynamo DB 的新手,可能这是一个非常微不足道的问题,但我浏览了 Dynamo DB 的文档和堆栈溢出问题,但我找不到一个link 说明如何查询 DDB 以获取 GSI,它只有哈希键并且没有为其指定范围键。

我收到异常非法查询表达式:查询中未找到散列键条件。

在您的 DynamoDB 注释模型对象上,您应该使用 @DynamoDBIndexHashKey(globalSecondaryIndexName = "gsiIndexName) 来表示它是 GSI 的哈希键:

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

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

    ...
}

然后在DynamoDBMapper上使用query方法:

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);