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

匿名 (未验证) 提交于 2019-12-03 01:23:02

问题:

I am very new to Dynamo DB and may be this is very trivial question, but i went through the documents of Dynamo DB and stack overflow questions but i couldnt find a single link which tells how to query DDB for GSI which has only hash key and there are no range key specified for the same.

I get the exception Illegal query expression: No hash key condition is found in the query.

回答1:

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 queryExpression =      new DynamoDBQueryExpression(); queryExpression.setHashKeyValues(gsiKeyObj); queryExpression.setIndexName("myGsi"); queryExpression.setConsistentRead(false);   // cannot use consistent read on GSI final PaginatedQueryList results =      mapper.query(MyTable.class, queryExpression);


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!