1

发电机表项

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) 更新记录时,它正在将“年龄”属性更新为 0,而地址属性未更改(这也是必需的)。

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

4

1 回答 1

2

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

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

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

于 2021-02-15T19:14:25.050 回答