2016-07-26 77 views
1

我有一個包含2個屬性的DynamoDB表 - 一個ID和一個JSON文檔的字符串。從我的研究中,我發現沒有辦法將JSON指定爲Java SDK中Table.updateItem()的類型。對於我的更新,我想完全覆蓋JSON文檔,而不是進入更新特定的屬性。我也想做一個updateItem而不是putItem(因爲它看起來好像我可以使用putItem,因爲我只是每次覆蓋文檔),因爲我最終會在表中存在其他一些我不想要的頂級屬性覆蓋或每次需要更新時更新 - 我希望能夠進入並更新文檔屬性並完全更新。使用Java SDK更新DynamoDB中的JSON文檔屬性

我收到的東西幾乎適用於我的CRUD操作,但是想知道是否有更好的方法。比如我在做這樣的事情:

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) {} 
} 

我真的希望我可以做這樣的事情,而不是:

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); 

任何幫助或建議,不勝感激。謝謝。

回答

0

今天看來ValueMap.withJSON(String)方法exists