invalid keyconditionexpression attribute name is a reserved keyword

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保持一致

上一篇:智能提示框--Servlet+XML配置


下一篇:从Hello World 开始