我正在使用新属性更新我们的一个 dynamoDb 实体,其中一个新属性称为 isEnabled,它是一种字符串类型,此数据不会存储在 dynamoDB 中,这是实体对象的示例
@NoArgConstructor
@DynamoDbBean
@DynamoDbTableName(tableName = "tableName")
data class DynamoEntity (
.....
@get:DynamoDbAttribute("isEnabled")
var isEnabled: String,
....
) {
.....
}
我发现,如果属性类型是布尔值,它就可以正常工作,而且如果我像这样更新数据类中的属性名称,它也可以正常工作。
@NoArgConstructor
@DynamoDbBean
@DynamoDbTableName(tableName = "tableName")
data class DynamoEntity (
.....
@get:DynamoDbAttribute("isEnabled")
var enabled: String,
....
) {
.....
}
我找不到任何相关文档,这是预期的行为吗?
我尝试更新布尔值和字符串之间的数据类型也尝试使用不同的名称
DynamoDbBean
只能用于符合 JavaBeans 规范 的类,而您的类不符合。
根据规范(8.3.1 简单属性),非布尔属性的 getter 应该以
get
为前缀,并且 is
只允许作为 boolean
属性的额外前缀。这就是为什么当您将数据类型更改为 boolean
时它会起作用,而当您将其更改回 string
时它会停止工作。
增强型客户端很可能使用反射从 getter 和 setter 方法推断属性名称和值,并在向 DynamoDB 读取或写入数据时调用这些方法 - 不遵守规范会导致该过程出现问题。
按照 JavaBeans 规范,将属性更改为
boolean
或使用 get
。