2016-07-26 76 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