如何在DynamoDB事务中使用UpdateItemRequest?

问题描述

到目前为止,我有一个Java Spring应用程序,使用的是DynamoDB,到目前为止没有事务。但是,最近我遇到了一个新的用例,它需要将相关对象持久化在一起。我是这个主题的新手,因此对DynamoDB事务有read的介绍,但是找不到以适当的面向对象方式使用API​​的方法。我想念什么?

现在,当我需要更新对象时,请按照以下步骤操作,构建一个UpdateItemRequest

Map<String,AttributeValueUpdate> updates = new HashMap<>();
// fill updates

Map<String,ExpectedAttributeValue> expected = new HashMap<>();
// fill expectations

UpdateItemRequest request = new UpdateItemRequest()
            .withTableName(TABLE_NAME)
            .withKey(key)
            .withAttributeUpdates(updates)
            .withExpected(expected);
dynamoDBClient.updateItem(request);

但是,用于构建事务的文档建议使用以下语法:

Map<String,AttributeValue> expressionAttributeValues = new HashMap<>();
expressionAttributeValues.put(":new_status",new AttributeValue("SOLD"));
expressionAttributeValues.put(":expected_status",new AttributeValue("IN_STOCK"));

Update markItemSold = new Update()
    .withTableName(PRODUCT_TABLE_NAME)
    .withKey(productItemKey)
    .withUpdateExpression("SET ProductStatus = :new_status")
    .withExpressionAttributeValues(expressionAttributeValues)
    .withConditionExpression("ProductStatus = :expected_status")
    .withReturnValuesOnConditionCheckFailure(ReturnValuesOnConditionCheckFailure.ALL_OLD);

如果我要遵循文档,那么我将需要构建一个update expression-但是我坚持的过程可能会非常复杂,并且这将需要进行一些繁琐的字符串操作,这并不令人满意(解析器必须,这会很慢并且容易出错)。

是否有一种方法可以从update expression获取UpdateItemRequest?或构建此类复杂表达式的任何推荐方法,例如作为某种序列化的形式?甚至更好的是,以某种面向对象的方式使用事务,传递更新对象的映射而不是大字符串?

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)