Java操作AWS DynamoDB数字自增失败:UpdateItemSpec配置问题求助
问题诊断与修复
你碰到的这个ValidationException其实是个很容易忽略的小细节——主键名称的大小写不匹配!
看你的代码:
- 在
GetItemSpec里,你指定的主键是"PKey"(注意是大写的K) - 但在
UpdateItemSpec里,你写成了"Pkey"(小写的k)
DynamoDB的属性名称(包括主键)是严格区分大小写的,这就导致更新操作找不到对应的主键条目,直接抛出了键元素不匹配的错误。
修正后的代码
把UpdateItemSpec里的主键名称改成和查询一致的"PKey"即可,同时你原来的ADD表达式是正确的,不需要用字符串形式传值:
UpdateItemSpec updateItemSpec = new UpdateItemSpec() .withPrimaryKey("PKey", "OrderNumber") // 这里把Pkey改成PKey,和查询时一致 .withReturnValues("UPDATED_NEW") .withUpdateExpression("ADD #k :incr") .withNameMap(new NameMap().with("#k", "NumVal")) .withValueMap( new ValueMap() .withNumber(":incr", 1)); // 这个写法是对的,不用改字符串
额外注意事项
- 始终保持DynamoDB操作中属性名称的大小写一致,不管是主键还是普通字段
- 用
ADD操作符给数字字段累加是DynamoDB推荐的方式,你的这个用法完全正确,之前尝试的.withString(":incr", "{N:\"1\"}")是多余的,反而会导致类型错误
修正之后,你的更新操作应该就能正常执行,返回累加后的NumVal值了。
内容的提问来源于stack exchange,提问作者Mikey
相关产品推荐
相关产品推荐

