Android 在DynamoDB映射中插入java.lang.Object
我正在使用Android应用程序在DynamoDB中同步数据 我需要插入属性Android 在DynamoDB映射中插入java.lang.Object,android,amazon-web-services,amazon-dynamodb,Android,Amazon Web Services,Amazon Dynamodb,我正在使用Android应用程序在DynamoDB中同步数据 我需要插入属性列表 这是我的DynamoDB表结构 public class AmznDynamoDeviceDB { private String identityID; private String deviceName; private List<Map<String, Object>> channels; @DynamoDBHashKey(attributeNa
列表
这是我的DynamoDB表结构
public class AmznDynamoDeviceDB {
private String identityID;
private String deviceName;
private List<Map<String, Object>> channels;
@DynamoDBHashKey(attributeName = "identityID")
public String getIdentityId(){
return this.identityID;
}
public void setIdentityId(String identityID){
this.identityID = identityID;
}
@DynamoDBAttribute(attributeName = "deviceName")
public String getDeviceName(){
return this.deviceName;
}
public void setDeviceName(String deviceName){
this.deviceName = deviceName;
}
@DynamoDBAttribute(attributeName = "channels")
public List<Map<String, Object>> getChannels(){
return this.channels;
}
public void setChannels(List<Map<String, Object>> channels){
this.channels = channels;
}
}
我可以在DynamoDB的Map元素中插入java.lang.Object吗
注意:如果我使用@DynamoDBMarshalling
将数据存储为字符串,我需要将其插入为列表
提前谢谢。我不知道你在这里找什么。当任何对象进入网络或保存到数据库时;它保存为字符串。。现在,如何实现这一点是使该对象可序列化。。确保您的对象(列表内)实现了可序列化
如果它被保存为数据库中的字符串,您不必担心(因为这将是另一个系统,而不是可以保存java对象的JVM);重要的是当你要求这个目标时;dynamoDB会自动将此对象转换为您所需的列表。如果您希望将
频道
属性保留为列表
,简单的答案是您无法将值保存为地图对象列表。唯一可用的解决方案是将数据转换为字符串并存储在DynamoDB中
转换为字符串或JSON的两个选项:-
1) @DynamoDBTypeConvertedJson
-此注释可用于将数据转换为JSON,并将其作为字符串属性存储在DynamoDB中
W/System.err: com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMappingException: Cannot marshall type class java.lang.Object without a custom marshaler or @DynamoDBDocument annotation.
@DynamoDBMarshalling
-已弃用
2) 编写自定义转换器。同样,这将把数据保存为DynamoDB中的字符串
注意:-
虽然DynamoDB支持文档数据类型,如列表和地图,但如果列表中有地图,则无法查询数据。DynamoDB API不支持筛选此数据模型的数据
如果您需要支持任何用例查询/更新channels
属性,我强烈建议您重新考虑数据模型,以扁平化数据结构
另一个缺点是无法在文档数据类型(列表和地图)上创建索引