我收到无效的 KeyConditionExpression:语法错误; token: "-", 当键名有连字符时,near:foo-bar。我尝试使用 with 表达式属性名称和属性值,但仍然遇到相同的错误。我该如何解决这个问题?
Invalid KeyConditionExpression: Syntax error; token: "-", near:
Map<String,String> eak = new HashMap<>();
eak.put("#k","foo-bar");
Map<String, AttributeValue> eav = new HashMap<>();
eav.put(":v", new AttributeValue().withS("val"));
DynamoDBQueryExpression<J> queryExpression = new DynamoDBQueryExpression<J>()
.withKeyConditionExpression("#k = :v")
.withExpressionAttributeNames(eak)
.withExpressionAttributeValues(eav)
.withScanIndexForward(true);
最佳答案
在使用 KeyConditionExpression
时,您似乎不能拥有包含连字符 foo-bar
的列。
在您的示例中,.withKeyConditionExpression("#k = :v")
• 扩展为 .f("foo-bar = val")
,
• 类似于.f("foo - bar = val")
(注意-
周围的空格)。
-
不再解释为列名称中的字符,而是解释为操作数。
由于显而易见的原因,这将引发错误,因为 -
不在允许的位置。
关于java - 在 dynamodb 映射器中使用连字符作为键名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49543643/