Man*_*amy 5 java amazon-web-services amazon-dynamodb
我查询的实体有一个HashKey&a RangeKey(数字).当我使用batchGetItem它时,我收到以下错误:
AWS错误代码:ValidationException,AWS错误消息:一个或多个参数值无效:位置和架构之间的属性类型不匹配
架构:
表:每日
哈希键:CustId(String)
范围键:日期(数量)
数据:
CustId:VisioNerdy
日期:1329071400000
码:
Run Code Online (Sandbox Code Playgroud)List<Key> fkeys = new ArrayList<Key>(); //tableName="Daily", keys=["VisioNerdy"], ranges=[1329071400000] Map<String, KeysAndAttributes> requestItems = new HashMap<String, KeysAndAttributes>(); for(int i = 0; i < keys.size(); i++) { String key = keys.get(i); if(ranges == null) fkeys.add(new Key().withHashKeyElement(new AttributeValue().withS(key))); else fkeys.add(new Key().withHashKeyElement(new AttributeValue().withS(key)) .withRangeKeyElement(new AttributeValue().withS(ranges.get(i).toString()))); } requestItems.put(tableName, new KeysAndAttributes().withKeys(fkeys)); BatchGetItemRequest batchGetItemRequest = new BatchGetItemRequest().withRequestItems(requestItems); BatchGetItemResult result = client.batchGetItem(batchGetItemRequest);
有线索吗?
您已将哈希和范围类型主键的range属性定义为Number类型,但是通过withS()类型String为您的请求准备其属性值:
fkeys.add(new Key().withHashKeyElement(new AttributeValue().withS(key))
.withRangeKeyElement(new AttributeValue().withS(ranges.get(i).toString())));
Run Code Online (Sandbox Code Playgroud)
将with(String s)更改为withN(String s)可以相应地解决您的问题(令人困惑的是两个方法都需要String类型的参数):
fkeys.add(new Key().withHashKeyElement(new AttributeValue().withS(key))
.withRangeKeyElement(new AttributeValue().withN(ranges.get(i).toString())));
Run Code Online (Sandbox Code Playgroud)
不可否认,基于String参数的DynamoDB数据类型提交的隐式弱类型不能完全简化开发;)
| 归档时间: |
|
| 查看次数: |
3174 次 |
| 最近记录: |