使用Java SDK更新DynamoDB中的JSON Document属性

时间:2016-07-26 17:22:15

标签: java json amazon-dynamodb aws-sdk

我有一个包含2个属性的DynamoDB表 - 一个ID和一个JSON文档的String。根据我的研究,我发现没有办法将JSON指定为Java SDK中Table.updateItem()的类型。对于我的更新,我想完全覆盖JSON文档,而不是进入更新特定属性。我也想做一个updateItem而不是putItem(因为它似乎我可以使用putItem,因为我每次只是覆盖文档)因为我最终会在我的表中有一些我不想要的其他顶级属性每次我需要更新时都会覆盖或更新 - 我希望能够进入并只更新文档属性并完全更新。

我得到的东西几乎适用于我的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);

任何帮助或建议非常感谢。感谢。

1 个答案:

答案 0 :(得分:0)

今天,似乎是ValueMap.withJSON(String)方法exists