2017-10-05 3 views
0

私はこのような4つのメンバ変数を持つモデルクラスを持っている:DynamoDBへの入力はアプリケーションのモデルクラスによって異なりますか?

A.java 
1.Attribute-1 
2.Attribute-2 
3.Attribute-3 
4.Attribute-4 

今、私はDynamoDBのにエントリを作成し、エントリが成功して行くと、私はエントリが起こって見ることができます。

私はモデルにいくつかの変更を行い、さらに2つの属性を追加しました。

5.Attribute-5 
6.Attribute-6 

アプリケーションでは、これらの2つの属性の値を設定しています。 アプリケーションにエントリを挿入しようとすると、このエラーが発生します。

com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; 

私はあなたがsave()方法でAWS SDK JAVAでDynamoDBMapperクラスを使用していると考えているエラー

答えて

0

は何ですか。

1)まず、既存のアイテムの更新を実行するときにモデルオブジェクトにキー値を設定する必要があります。 save()実行いずれかを作成または更新アイテム

2)第二に、メソッドを保存が動作設定を保存しています。あなたはそれに応じて、ユースケースに基づいて動作を設定する必要が

保存ます。public void(Tオブジェクト、 DynamoDBSaveExpression saveExpression、 DynamoDBMapperConfigの設定)

UPDATE(デフォルト):更新します 保存操作でモデル化されていない属性には影響しません。モデル化された属性にはnull値を指定すると、 がDynamoDBのその項目から削除されます。 updateItem 要求の制限のため、 のキーのみのオブジェクトが保存されると、UPDATEの実装はputItem要求を送信し、指定されたキーがすでにテーブルに存在する場合は別のupdateItem 要求を送信します。

UPDATE_SKIP_NULL_ATTRIBUTES:それはすべてのNULL値の属性(複数可) 無視し DynamoDBの中で、その項目からそれらを削除しないことを除いてUPDATEに似ています。オブジェクトがキーのみであるかどうかにかかわらず、updateItem 要求を1つだけ送信することも保証されます。

CLOBBER:CLOBBER は、保存されていないモデルに含まれているすべての属性を消去して置き換えます(削除および再作成)。バージョン管理されたフィールド制約は も無視されます。 saveExpressionパラメータ で指定されたオプションは、バージョン属性によってすべての制約にオーバーレイされます。

Reference link

サンプルコード: -

Movies movies = new Movies(); 
//setting the partition and sort key 
movies.setYearKey(1999); 
movies.setTitle("MyMovie BOOL"); 

//New attribute added 
movies.setProducts(Stream.of("prod1").collect(Collectors.toSet())); 


DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient); 

//Set the save behavior, so that it wouldn't impact the existing attributes. Refer the full definition above 
dynamoDBMapper.save(movies, SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES.config()); 
関連する問題