On your DynamoDB annotated model object, you should use @DynamoDBIndexHashKey(globalSecondaryIndexName = "gsiIndexName)
to signify that it is a hash key for the GSI:
@DynamoDBTable(tableName = "myTable")
public class MyTable {
...
@DynamoDBIndexHashKey(globalSecondaryIndexName = "myGsi")
public String getGsiHk() {
return gsiHk;
}
...
}
And then use the query
method on the 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);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…