Jam*_*ker 14 java amazon-web-services amazon-dynamodb aws-lambda
我正在尝试在AWS DynamoDB表中存储一个字符串数组.在大多数情况下,此数组将填充至少一个字符串.但是,存在阵列可能为空的情况.
我在Java Lambda函数中创建了一个DynamoDB模型,该函数有一组字符串作为其中一个属性.如果我在字符串集为空时尝试保存DynamoDB模型,则会给出一个错误,指出我无法在DynamoDB中存储空集.
所以我的问题是,在我在DynamoDB中保存/更新它之前,如何从我的模型中删除该set属性?
这是模型的一个例子.
@DynamoDBTable(tableName = "group")
public class Group {
private String _id;
private Set<String> users;
@Null
@DynamoDBHashKey
@DynamoDBAutoGeneratedKey
public String getId() {
return _id;
}
public void setId(final String id) {
_id = id;
}
@DynamoDBAttribute
public Set<String> getUsers(){
return users;
}
public void setUsers(final Set<String> users) {
this.users = users;
}
public void addUser(String userId) {
if(this.users == null){
this.setUsers(new HashSet<String>(Arrays.asList(userId)));
}else{
this.getUsers().add(userId);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我第一次创建一个小组.它可能没有用户,也可能有一个或多个用户.
当谈到实际问题时,这是因为我继承的代码将 DynamoDBMapperConfig 上的 SaveBehavior 设置为 UPDATE_SKIP_NULL_ATTRIBUTES,它会跳过空值,因此永远不会将它们从 DynamoDB 中删除。请参阅这篇文章,了解所有不同的保存行为。https://java.awsblog.com/post/Tx1MH3BFPW8FX6W/Using-the-SaveBehavior-Configuration-for-the-DynamoDBMapper
进一步详细说明这一点。
我正在 JAVA 项目中设置 DynamoDBMapperConfig.SaveBehavior。
_dynamoDBMapperConfig = new DynamoDBMapperConfig.Builder()
.withSaveBehavior(SaveBehavior.UPDATE)
.withTableNameResolver(TABLE_NAME_RESOLVER)
.withConversionSchema(ConversionSchemas.V2)
.build();
然后,每当您更新具有映射的 @DynamoDBAttribute 的模型时,您还需要将特定值设置为 (null)。
user.setFirstName(null)
Run Code Online (Sandbox Code Playgroud)
这是我发现能够从 DynamoDB 条目中删除属性的最简单方法。
| 归档时间: |
|
| 查看次数: |
4579 次 |
| 最近记录: |