我有一个用java编写的Lambda函数,它与DynamoDB进行通信。对于一个表,我必须将属性的类型从普通整数更改为自定义对象,我将在保存时将其转换为Set(DynamoDB SS数据类型)。但是由于此表中已有文档,因此从该属性读取时,此属性可以具有整数(N)数据类型或SS数据类型。
我的自定义对象已经有一个转换器,它实现了DynamoDBTypeConverter,CustomObject>。为了处理可能是整数的db数据类型,我尝试将其更改为DynamoDBTypeConverter,但不幸的是,java sdk似乎不允许dynamodb类型成为通用对象。
有没有办法用转换器处理这些多种数据类型?我是否必须单独转换数据库中的所有值?或者我应该只使用一个全新的属性并弃用旧的整数属性?
答案 0 :(得分:0)
由于DynamoDBMapper显然不允许转换类型为Object(如com.amazonaws.services.dynamodbv2datamodeling.ConvertibleType.of(DynamoDBTypeConverter<?,T>)
方法中所示),但Object是我需要处理的两个类中唯一的常见父类,我无法思考通过反思处理这个问题的方法。
相反,我只使用DynamoDBTypeConverter,CustomObject&gt;转换对象,但在我的包含CustomObject(之前是int)的模型中,我使用@DynamoDBAttribute(attributeName="newAttName")
将字段指向数据库中的其他属性。遗憾的是,这意味着前一个属性中的所有数据都会丢失,但在我的情况下,这似乎是处理此问题的最有效方法。希望这可能会帮助遇到此问题的其他人。