我有一个场景,我必须执行多个查询(删除和添加)所以我使用dynamoDB的事务库,但我收到序列化错误。我把这个网址作为一个例子 http://aws.amazon.com/blogs/aws/dynamodb-transaction-library/
以下是我的代码:
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
PaginatedScanList<FinanceIndex> financeIndex = mapper.scan(FinanceIndex.class, scanExpression);
String index, index1 = null;
AWSCredentials credentials = Application.getCredentials();
AmazonDynamoDB client = new AmazonDynamoDBClient(credentials);
TransactionManager manager = new TransactionManager(client, "Transactions", "TransactionImages");
TransactionManager.verifyOrCreateTransactionTable(client, "Transactions", new Long(10) , new Long(10), new Long(1060));
TransactionManager.verifyOrCreateTransactionImagesTable(client, "TransactionImages", new Long(10), new Long(10), new Long(1060));
for (FinanceIndex financeID : financeIndex) {
index1 = financeID.getID();
Transaction t1 = manager.newTransaction();
Map<String, AttributeValue> reply1 = new HashMap<String, AttributeValue>();
reply1.put("id", new AttributeValue(index1));
t1.deleteItem(new DeleteItemRequest().withTableName("FinanceIndex").withKey(reply1));
//mapper.delete(financeID);
int id = Integer.valueOf(index1);
id = id + 1;
index = String.valueOf(id);
financeID.setID(index);
//mapper.save(financeID);
Map<String, AttributeValue> reply2 = new HashMap<String, AttributeValue>();
reply2.put("id", new AttributeValue(financeID.getID()));
t1.putItem((new PutItemRequest().withTableName("FinanceIndex").withItem(reply2)));
t1.commit();
}
return index1;
我得到以下错误:
com.amazonaws.services.dynamodbv2.transactions.exceptions.TransactionAssertionException:d1c3bb93-e9b7-4052-b328-b357ab412a3a - 无法序列化请求com.amazonaws.services.dynamodbv2.transactions.Request$DeleteItem@4dcdd700 com.fasterxml。 jackson.databind.JsonMappingException:找不到类com.amazonaws.event.ProgressListener $ 1的序列化程序,并且没有发现创建BeanSerializer的属性(为了避免异常,禁用SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS))(通过参考链:com.amazonaws.services。 dynamodbv2.transactions.DeleteItem [&#34;请求&#34;] - &GT; com.amazonaws.services.dynamodbv2.model.DeleteItemRequest [&#34; generalProgressListener&#34;])
谁能告诉我,我做错了什么? 提前谢谢。
答案 0 :(得分:0)
我也使用这个库,并且发生并研究了类似的问题。
此库现在不是AWS Java SDK的维护。 因此,此库正确工作,直到AWS Java SDK 1.7.6。
因为超过1.7.7有关于条件表达式的新功能。 http://aws.amazon.com/releasenotes/Java/2402335129612731
Dynamodb-transaction库不遵循此功能,无法创建正确的查询。 所以不能一起使用1.7.7添加future和dynamodb-transaction。
超过1.7.7的库具有如此美好的未来,就像条件原子计数器一样。 但交易功能也很重要..
现在只有我们可以使用AWS Java SDK 1.7.6的事务库或没有最新AWS Java SDK的事务库来选择我们。
祝你好运。