Varun Aggarwal
Varun Aggarwal

Reputation: 23

java.lang.IllegalArgumentException in Dynamodb

I have the following code:-

    Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
    eav.put(":val1", new AttributeValue().withS("12"));

    ScrapCategoryDO myObject = new ScrapCategoryDO();
    myObject.setCategoryName("Iron");
    DynamoDBQueryExpression<ScrapCategoryDO> queryExpression = new DynamoDBQueryExpression<ScrapCategoryDO>()
            //.withHashKeyValues(myObject)
            .withFilterExpression("UnitPrice < :val1")
            .withExpressionAttributeValues(eav);

    List<ScrapCategoryDO> latestReplies = mapper.query(ScrapCategoryDO.class, queryExpression);
    Log.d(TAG, "Number of categories = "+latestReplies.size());
    for (ScrapCategoryDO reply : latestReplies) {
        Log.d(TAG,"category name = "+reply.getCategoryName()+", unit price = "+ reply.getUnitPrice());
    }

And I am getting the following error on with .withHashKeyValues(myObject) as commented. I want to know how can I query the entire table without any filter criteria/condition or so? I tried :-

     DynamoDBQueryExpression<ScrapCategoryDO> queryExpression = new DynamoDBQueryExpression<ScrapCategoryDO>();

But still I was getting the same error.

W/System.err﹕ java.lang.IllegalArgumentException: Illegal query expression: No hash key condition is found in the query
W/System.err﹕ at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.processKeyConditions(DynamoDBMapper.java:2424)
W/System.err﹕ at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.createQueryRequestFromExpression(DynamoDBMapper.java:2386)
W/System.err﹕ at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.query(DynamoDBMapper.java:2169)
W/System.err﹕ at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.query(DynamoDBMapper.java:2130)
W/System.err﹕ at com.example.rohitsingla.scrapman.MyActivity.FindAllScrapCategories(MyActivity.java:207)
W/System.err﹕ at com.example.rohitsingla.scrapman.MyActivity.access$000(MyActivity.java:26)
W/System.err﹕ at com.example.rohitsingla.scrapman.MyActivity$3.run(MyActivity.java:164)

Upvotes: 1

Views: 969

Answers (1)

notionquest
notionquest

Reputation: 39156

Please use scan API to get all the records from DynamoDB table. Here is the sample code.

Query API can't be used without the key attributes.

Sample code:-

ScanResultPage<yourModelClass> yourModelClassResultPage = null;
do {
    DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient);
    DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
    if (yourModelClassResultPage != null) {
        scanExpression.setExclusiveStartKey(yourModelClassResultPage.getLastEvaluatedKey());
    }
    yourModelClassResultPage = dynamoDBMapper.scanPage(yourModelClass.class, scanExpression);   

} while (yourModelClassResultPage.getLastEvaluatedKey() != null);

Scan API documentation

Upvotes: 1

Related Questions