如何使用 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);
我是 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);