如何使用DynamoDBMapper仅使用hashKeys查询具有GSI的Dynamo数据库

Ank*_*jee 13 amazon-dynamodb secondary-indexes

我是Dynamo DB的新手,可能这是一个非常简单的问题,但我查看了Dynamo DB的文档和堆栈溢出问题,但我找不到一个链接,告诉我如何查询DDB for GSI只有哈希键和没有指定相同的范围键.

我得到异常非法查询表达式:在查询中找不到散列键条件.

mko*_*bit 31

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

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

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

然后使用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);
Run Code Online (Sandbox Code Playgroud)