【问题标题】:DynamoDB remove an existing attribute and add new attributeDynamoDB 删除现有属性并添加新属性
【发布时间】:2020-12-16 01:16:25
【问题描述】:

我们有一个现有的 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-dynamodb dynamodb-mapper


    【解决方案1】:

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

    【讨论】:

    • 所以,在加载任何具有“最新”属性的过去数据时,它会忽略该属性?
    • 是的,对于过去的数据,它将为“最新”属性返回空/null
    猜你喜欢
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多