使用 UpdateItemRequest 更新 dynamoDb 项目的用户定义对象
Update User defined object of the dynamoDb item using UpdateItemRequest
我们有一个 DynamoDB table 测试,它有一个属性模板。下面是 class 定义。我想根据特定条件更新模板属性或其某些属性。我尝试使用 UpdateItemRequest 做同样的事情,但无法找到更新模板属性的方法,因为所有内容都被转换为字符串、数字或字节。
参考代码。
@DynamoDbBean
public class Test implements NoSQLEntity {
private String name;
private Template template;
@DynamoDbAttribute("name")
public String getName() {
return name;
}
@DynamoDbAttribute("template")
public Template getTemplate() {
return template;
}
}
@DynamoDbBean
public class Template {
private String pk;
private String name;
private List<String> demo;
@DynamoDbAttribute("pk")
public String getPk() {
return this.pk;
}
@DynamoDbAttribute("name")
public String getName() {
return name;
}
@DynamoDbAttribute("demo")
public List<String> getdemo() {
return demo;
}
}
示例更新代码:
UpdateItemRequest request = UpdateItemRequest.builder()
.tableName("Test")
.key(itemKey)
.updateExpression("SET tmpt = :tmt")
.expressionAttributeValues(expressionValues)
.build();
这里我无法使用 AttributeValue 构建 :tmt。有人可以指导我吗?
这是来自工程团队的自述文件,您可能会觉得有用:
https://github.com/aws/aws-sdk-java-v2/tree/master/services-custom/dynamodb-enhanced
DynamoDb Enhanced 提供 DefaultAttributeConverterProvider,它将识别一个转换器,该转换器可以将特定的 Java 类型转换为可用于更新项目的 AttrbuteValue 类型。
示例代码:
AttributeValue value = DefaultAttributeConverterProvider.create()
.converterFor(EnhancedType.documentOf(Template.class,
TableSchema.fromBean(Template.class)))
.transformFrom(template);
然后可以将此值放入 expressionValues 映射中。
Map<String, AttributeValue> expressionValues = new HashMap<>();
expressionValues.put(":tmt", value);
UpdateItemRequest request = UpdateItemRequest.builder()
.tableName("Test")
.key(itemKey)
.updateExpression("SET tmpt = :tmt")
.expressionAttributeValues(expressionValues)
.build();
我们有一个 DynamoDB table 测试,它有一个属性模板。下面是 class 定义。我想根据特定条件更新模板属性或其某些属性。我尝试使用 UpdateItemRequest 做同样的事情,但无法找到更新模板属性的方法,因为所有内容都被转换为字符串、数字或字节。
参考代码。
@DynamoDbBean
public class Test implements NoSQLEntity {
private String name;
private Template template;
@DynamoDbAttribute("name")
public String getName() {
return name;
}
@DynamoDbAttribute("template")
public Template getTemplate() {
return template;
}
}
@DynamoDbBean
public class Template {
private String pk;
private String name;
private List<String> demo;
@DynamoDbAttribute("pk")
public String getPk() {
return this.pk;
}
@DynamoDbAttribute("name")
public String getName() {
return name;
}
@DynamoDbAttribute("demo")
public List<String> getdemo() {
return demo;
}
}
示例更新代码:
UpdateItemRequest request = UpdateItemRequest.builder()
.tableName("Test")
.key(itemKey)
.updateExpression("SET tmpt = :tmt")
.expressionAttributeValues(expressionValues)
.build();
这里我无法使用 AttributeValue 构建 :tmt。有人可以指导我吗?
这是来自工程团队的自述文件,您可能会觉得有用:
https://github.com/aws/aws-sdk-java-v2/tree/master/services-custom/dynamodb-enhanced
DynamoDb Enhanced 提供 DefaultAttributeConverterProvider,它将识别一个转换器,该转换器可以将特定的 Java 类型转换为可用于更新项目的 AttrbuteValue 类型。
示例代码:
AttributeValue value = DefaultAttributeConverterProvider.create()
.converterFor(EnhancedType.documentOf(Template.class,
TableSchema.fromBean(Template.class)))
.transformFrom(template);
然后可以将此值放入 expressionValues 映射中。
Map<String, AttributeValue> expressionValues = new HashMap<>();
expressionValues.put(":tmt", value);
UpdateItemRequest request = UpdateItemRequest.builder()
.tableName("Test")
.key(itemKey)
.updateExpression("SET tmpt = :tmt")
.expressionAttributeValues(expressionValues)
.build();