2016-07-26 26 views
1

IDとJSONドキュメントの2つの属性を持つDynamoDBテーブルがあります。私の研究から、Java SDKのTable.updateItem()の型としてJSONを指定する方法がないことがわかりました。私の更新では、JSONドキュメントを完全に上書きするのではなく、特定の属性を更新する必要があります。私は最終的に私のテーブルに私がしたくない他のトップレベルの属性を持つことになるので、putItemではなくupdateItemを実行したいのです(putItemを使うことができるように思えるので、毎回そのドキュメントを上書きしているようです)更新を行う必要があるたびに上書きしたり更新したりすることができます。私は入ってきて、ドキュメント属性を更新して完全に更新したいと思っています。Java SDKを使用したDynamoDBのJSONドキュメント属性の更新

CRUD操作ではほとんど機能するものが得られましたが、より良い方法があるかどうかは疑問です。たとえば、私はこのような何かやってる:

UpdateItemSpec updateItemSpec = new UpdateItemSpec() 
    .withPrimaryKey("Id", uuid.toString()) 
    .withUpdateExpression("set #da = :d") 
    .withNameMap(new NameMap() 
     .with("#da", "data")) 
    .withValueMap(new ValueMap() 
     .withJSON(":d", objectAsStr)) // withJSON() method sadly doesn't exist 
    .withReturnValues(ReturnValue.UPDATED_NEW); 

すべてのヘルプや提案も大歓迎:

public <T extends BaseEntity> void updateObject(T newEntity, UUID uuid) { 
    try { 
     TypeReference<HashMap<String, Object>> typeRef = 
      new TypeReference<HashMap<String, Object>>() {}; 
     HashMap<String, Object> dataMap = 
      mapper.readValue(mapper.writeValueAsString(newEntity), typeRef); 

     UpdateItemSpec updateItemSpec = new UpdateItemSpec() 
       .withPrimaryKey("Id", uuid.toString()) 
       .withAttributeUpdate(new AttributeUpdate("data").put(dataMap)) 
       .withReturnValues(ReturnValue.UPDATED_NEW); 

     UpdateItemOutcome outcome = table.updateItem(updateItemSpec); 
    } catch (Exception e) {} 
} 

を私は本当にだけではなく、このような何かを行うことがしたいです。ありがとう。

答えて

0

今日、ValueMap.withJSON(String)メソッドexistsと思われます。

関連する問題