invalid keyconditionexpression attribute name is a reserved keyword
DynamoDB中保留关键字
小编在使用DynamoDB查询一个带status的数据,该status字段在DynamoDB中是保留字段,类似Mysql中的关键字,此时查询语句就会报错了。 Java中解决该问题就是使用占位符的方式,在通过withExpressionAttributeValues
对其进行关联。
解决方式如下:
Map<String, AttributeValue> map = new HashMap<>();
map.put(":status", new new AttributeValue().withN(3);
//use the aliasMap to map the reserved field:status
Map<String, String> aliasMap = new HashMap();
aliasMap.put("#S", "status");
// #S is placehold
DynamoDBQueryExpression<T> queryExpression = new DynamoDBQueryExpression<T>()
.withKeyConditionExpression("#S=:status")
.withIndexName("status-index")
.withExpressionAttributeNames(aliasMap)
.withExpressionAttributeValues(map)
.withLimit(pageSize)
.withConsistentRead(false)
.withScanIndexForward(false);
Note:#S这是占位符,开发者自己定义,但是一定要和aliasMap的key保持一致