首页 > 解决方案 > DynamoDB 删除现有属性并添加新属性

问题描述

我们有一个现有的 DynamoDB 表,该表具有非关键属性“最新”。我们希望从现在开始使用另一个名为“latestV2”的新项目删除此属性。只是将模型类中的属性替换为较新的一项工作,还是我们需要保留它们并且不再设置旧的。当前模型类:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@DynamoDBTable(tableName = "Table1")
public class Table1DAO {
    @DynamoDBHashKey(attributeName = "id")
    private String id;

    @DynamoDBAttribute(attributeName = "latest")
    private Boolean latest;
}

这会起作用吗:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@DynamoDBTable(tableName = "Table1")
public class Table1DAO {
    @DynamoDBHashKey(attributeName = "id")
    private String id;

    @DynamoDBAttribute(attributeName = "latestV2")
    private Boolean latest;
}

底层的 setter/getter setlatest()/getlatest() 也应该适用于新的 attributeName。问题是,当加载任何带有旧“最新”标志的旧项目为真时,由于该属性不再建模,它会破坏代码吗?

或者我们应该在 Model 类中同时拥有这两个属性,并且只更改旧属性的变量名称,以便它永远不会像这样再次设置/获取:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@DynamoDBTable(tableName = "Table1")
public class Table1DAO {
    @DynamoDBHashKey(attributeName = "id")
    private String id;

    @DynamoDBAttribute(attributeName = "latest")
    private Boolean latestold;

    @DynamoDBAttribute(attributeName = "latestV2")
    private Boolean latest;
}

标签: amazon-dynamodbdynamodb-mapper

解决方案


是表映射器的一个很好的例子。将@DynamoDBAttribute字段名称从 DynamoDB 映射到 java 类,因此将忽略“latest”属性并使用“latestV2”。因此,要回答您的问题,您不需要保留这两个属性并且修改旧属性不会影响您的代码,只要它没有映射到任何 java 类属性。


推荐阅读