2016-12-23 5 views
0

は私のDynamoDBのテーブル構造が挿入java.lang.Object上位

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に挿入すると次のエラーが発生する

W/System.err: com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMappingException: Cannot marshall type class java.lang.Object without a custom marshaler or @DynamoDBDocument annotation. 

DynamoDBのMap要素のjava.lang.Objectです。

注:私は、文字列として@DynamoDBMarshalling店舗データを使用する場合、私は事前にList<Map<String, Object>>

感謝として挿入する必要があります。

答えて

0

ここであなたが探しているものはわかりません。オブジェクトがネットワーク上に移動したり、データベースに保存されたりすると、これはStringとして保存されます。これを実現する方法は、そのオブジェクトをシリアライズ可能にすることです。オブジェクト(List内)がSerializableを実装していることを確認してください。

DBにStringとして保存されていると心配する必要はありません。なぜなら、これは別のシステムであり、Javaオブジェクトを保持できるJVMではないためです。何が問題なのかは、あなたがこのオブジェクトを求めるときです。 dynamoDBは自動的にこのオブジェクトをあなたが必要とするリストに変換します。

0

List<Map<String, Object>>の属性をchannelのままにしたい場合は、MapオブジェクトのListとして値を保存できないという単純な答えです。利用できる唯一の解決策は、データをStringとして変換してDynamoDBに格納することです。文字列またはJSONに変換するオプションの

カップル: -

1)@DynamoDBTypeConvertedJson - この注釈は、JSONにデータを変換してDynamoDBの

@DynamoDBMarshallingにString属性としてそれを格納するために使用することができます -

2)カスタムコンバータを作成します。この場合も、データはStringとしてDynamoDBに保存されます。

DynamoDBTypeConverted

注: -

もののDynamoDBのは、このようなリストや地図などの文書データ型をサポートしていますが、リスト内の地図を持っている場合、データを照会することは不可能になります。 DynamoDB APIは、このデータモデルのデータのフィルタリングをサポートしていません。

channels属性をクエリ/更新するユースケースをサポートする必要がある場合は、データ構造をフラット化するためにデータモデルについて再考することを強くおすすめします。

もう1つ欠点は、ドキュメントデータ型(リストとマップ)ではインデックスを作成できません。

関連する問題