首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dynamo UPDATE_SKIP_NULL_ATTRIBUTES行为将未建模的数字属性更新为“0”

Dynamo UPDATE_SKIP_NULL_ATTRIBUTES行为将未建模的数字属性更新为“0”
EN

Stack Overflow用户
提问于 2021-01-25 15:48:14
回答 1查看 2.1K关注 0票数 1

发电机表项

代码语言:javascript
复制
id : number
Name : string
age : number
Address : sting

代码语言:javascript
复制
id : int
Name : String
age : int
Address : String

我的DynamoMapperConfig是

代码语言:javascript
复制
dynamoDBMapperConfig = new DynamoDBMapperConfig.Builder()
            .withTableNameOverride(DynamoDBMapperConfig.TableNameOverride.withTableNameReplacement(tableName))
            .withSaveBehavior(DynamoDBMapperConfig.SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES)
            .build();

要插入的Json是

代码语言:javascript
复制
{"id" : 1,"name":"xyz"}

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

本例适用于所有的java原语数字类型,如int、Float等,并且可以使用包装类,如Integer、float。我不知道,为什么原语类型被重写为默认值。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2021-02-15 19:14:25

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

在您的示例中,‘'Address’是一个字符串,它是一个Java对象,而Java中的对象是用null初始化的。类似地,如果您将POJO中的'age‘更改为对象类型Integer (原始in的包装器类),则不应该覆盖它。

另一方面,在用Java命名属性时,通常使用较低的camelCase (即'Name‘& 'Address’应该分别为'name‘和'address’)。例如,您可以使用@DynamoDBAttribute(attributeName = "Address")将这些属性映射到正确的DynamoDB表属性名。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65887997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档