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);
我有以下代码:-
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);