DynamoDB 删除现有属性并添加新属性

DynamoDB remove an existing attribute and add new attribute

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

@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;
}

基础 setters/getters setlatest()/getlatest() 也应该适用于新的 attributeName。问题是,在加载任何带有旧“最新”标志的旧项目时,它是否会破坏代码,因为该属性不再建模?

或者我们是否应该在模型 class 中同时拥有这两个属性,并且只更改旧属性的变量名称,这样它就再也不会像这样 set/get 了:

@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;
}

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