Dynamo DB UPDATE_SKIP_NULL_ATTRIBUTES 行为将未建模的 Number 属性更新为“0”

问题描述

Dynamo 表项

id : number
Name : string
age : number
Address : sting

Java pojo 是

id : int
Name : String
age : int
Address : String

我的 DynamoMapperConfig

dynamoDBMapperConfig = new DynamoDBMapperConfig.Builder()
            .withTableNameOverride(DynamoDBMapperConfig.TableNameOverride.withTableNameReplacement(tableName))
            .withSaveBehavior(DynamoDBMapperConfig.SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES)
            .build();

要插入的Json是

{"id" : 1,"name":"xyz"}

现在,当使用 DynamoMapper.save(item,dynamoDBMapperConfig) 更新记录时,它会将“age”属性更新为 0,而地址属性不变(这也是必需的)。

这种情况适用于所有 java 原语数字类型,如 int、float 等,也适用于 Integer、Float 等包装类。 我不知道,为什么原始类型被覆盖为认值。有什么建议吗?

解决方法

flutter create --platforms=web,macos . 只会跳过空属性。 Java Primitives 不能为 null,因此使用适当的默认值进行初始化,例如 SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES 类型的 0。

'Address' 在您的情况下是一个字符串,它是一个 Java 对象,并且 Java 中的对象初始化为 null。同样,如果您将 POJO 中的“年龄”更改为对象类型 int(原始整数的 Wrapper-Class),它不应被覆盖。

另一方面,在 Java 中命名属性时通常使用小驼峰命名(即“名称”和“地址”应分别为“名称”和“地址”)。例如,您可以使用 Integer 将这些映射到正确的 DynamoDB 表属性名称。