java.lang.IllegalArgumentException 在 Dynamodb 中

java.lang.IllegalArgumentException in Dynamodb

我有以下代码:-

    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());
    }

而且我在使用 .withHashKeyValues(myObject) 时收到以下错误,如评论所述。我想知道如何在没有任何过滤器 criteria/condition 的情况下查询整个 table?我试过了:-

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

但我仍然遇到同样的错误。

W/System.err﹕ java.lang.IllegalArgumentException: 非法查询表达式: 查询中没有找到散列键条件
W/System.err:在 com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.processKeyConditions(DynamoDBMapper.java:2424)
W/System.err:在 com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.createQueryRequestFromExpression(DynamoDBMapper.java:2386)
W/System.err:在 com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.query(DynamoDBMapper.java:2169)
W/System.err:在 com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.query(DynamoDBMapper.java:2130)
W/System.err:在 com.example.rohitsingla.scrapman.MyActivity.FindAllScrapCategories(MyActivity.java:207)
W/System.err:在 com.example.rohitsingla.scrapman.MyActivity.access$000(MyActivity.java:26)
W/System.err:在 com.example.rohitsingla.scrapman.MyActivity$3.run(MyActivity.java:164)

请使用扫描API从DynamoDBtable中获取所有记录。这是示例代码。

查询 API 不能在没有键属性的情况下使用。

示例代码:-

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