如何执行AWS Java SDK v2中的UpdateExpression更新操作
使用AWS Java SDK v2执行UpdateExpression更新DynamoDB项
要执行你构建的UpdateExpression,需要通过DynamoDbTable的updateItem方法,结合UpdateItemEnhancedRequest来指定主键、更新表达式以及必要的表达式名称映射(因为你用了占位符#optIn)。
完整修正代码
DynamoDbEnhancedClient client = DynamoDbEnhancedClient.builder() .dynamoDbClient(DynamoDbClient.builder().region(Region.EU_WEST_1).build()) .extensions(AutoGeneratedUuidExtension.create()) .build(); DynamoDbTable<MyClass> table = client.table("MyTable", TableSchema.fromBean(MyClass.class)); // 定义表达式名称映射,将占位符#optIn替换为实际属性名 Map<String, String> expressionNames = new HashMap<>(); expressionNames.put("#optIn", "optIn"); // 替换为MyClass中对应的属性字段名 SetAction action = SetAction.builder() .path("#optIn") .value("if_not_exists(#optIn,:optInValue)") .putExpressionValue(":optInValue", AttributeValue.fromBool(true)) .build(); UpdateExpression updateExpression = UpdateExpression.builder() .addAction(action) .expressionNames(expressionNames) // 添加表达式名称映射 .build(); // 创建仅包含主键的对象,指定要更新的目标项 MyClass keyItem = new MyClass(); keyItem.setUniqueId(uniqueId); // 假设MyClass中用uniqueId作为主键属性 // 构建更新请求 UpdateItemEnhancedRequest<MyClass> updateRequest = UpdateItemEnhancedRequest.builder(MyClass.class) .item(keyItem) .updateExpression(updateExpression) .build(); // 执行更新操作 table.updateItem(updateRequest);
关键说明
- 表达式名称映射:使用
#optIn这类占位符时,必须通过expressionNames将其映射到实际的属性名称,否则DynamoDB无法解析占位符。 - 主键指定:通过仅设置主键属性的
MyClass对象,明确告诉DynamoDB要更新哪一条数据。 - UpdateItemEnhancedRequest:SDK v2增强客户端中用于封装更新请求的核心类,关联主键项与更新表达式。
内容的提问来源于stack exchange,提问作者Izak Joubert
相关产品推荐
相关产品推荐

