我试图从表动物上的所有项目中删除一个名为“dog”的字段,或者使用以下代码:
Table table= dynamoDB.getTable("animals");
ScanRequest scanRequest = new ScanRequest().withTableName("animals");
ScanResult result = client.scan(scanRequest);
for (Map<String, AttributeValue> item : result.getItems()){
table.updateItem(new PrimaryKey("<Primary partition key name>", item.get("<Primary partition key name>"),"<Primary sort key name>", item.get("<Primary sort key name>")),
new AttributeUpdate("dog").delete());
}
但我得到了:
Exception in thread "main" java.lang.RuntimeException: value type: class com.amazonaws.services.dynamodbv2.model.AttributeValue
.
.
.
Caused by: java.lang.UnsupportedOperationException: value type: class com.amazonaws.services.dynamodbv2.model.AttributeValue
我做错了什么?
顺便说一下,我也试过:
UpdateItemSpec updateItemSpec = new UpdateItemSpec()
.withPrimaryKey("<Primary partition key name>", item.get("<Primary partition key name>"),"<Primary sort key name>", item.get("<Primary sort key name>"))
.withUpdateExpression("REMOVE dog");
table.updateItem(updateItemSpec);
但也有同样的例外(还尝试了删除而不是删除)
1条答案
按热度按时间56lgkhnf1#
您使用的是旧的v1 dynamodbapi,这不是最佳实践。使用AmazonDynamodbv2JavaAPI是更好的实践。
AWSSDKforJava2.x是对Version1.x代码库的主要重写。它构建在Java8+之上,并添加了几个经常请求的特性。其中包括对非阻塞i/o的支持,以及在运行时插入不同http实现的能力。
如果您不熟悉aws sdk for java v2,请参阅:
开始使用aws sdk for java 2.x
对于这个用例(修改一个项),解决方案是使用增强型客户机,它允许您将java对象Map到表。有关详细信息,请参阅:
dynamodb表中的Map项
使用增强型clint,您可以使用以下代码修改项目:
您可以在此处找到此v2示例和amazon dynamodb的其他示例:
https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/example_code/dynamodb