amazon-dynamodb - 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;
}
解决方案
这是表映射器的一个很好的例子。将@DynamoDBAttribute
字段名称从 DynamoDB 映射到 java 类,因此将忽略“latest”属性并使用“latestV2”。因此,要回答您的问题,您不需要保留这两个属性并且修改旧属性不会影响您的代码,只要它没有映射到任何 java 类属性。
推荐阅读
- javascript - 使用 Javascript 获取图像尺寸并将其应用于任何其他元素?
- javascript - 使用两列过滤器检索数据范围
- r - R highcharter 向下钻取图表问题
- javascript - 如何在没有外部节点名称的情况下获取内部节点中的 Firebase 数据?
- powershell - 需要 PowerShell 脚本协助来清理 AD 中符合条件的计算机
- mongodb - 使用 GraphQL Query 在与 mongoose 聚合后从 MongoDB 获取结果
- rust - Rust/Rocket:当用户发出 HTTP 请求时,我如何返回多个页面/文档?
- git - 如何 git 将 sha 中的所有文件提取到`/tmp`?
- reactjs - Gatsby: gatsby-plugin-theme-ui '标签未定义' 错误
- python - 如何使 Kivy Checkbox 成为正方形