我有一个具有 2 个属性的 DynamoDB 表 - 用于 ID 的字符串和一个 JSON 文档。根据我的研究,我发现没有办法将 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);
非常感谢任何帮助或建议。谢谢。
最佳答案
今天,似乎是 ValueMap.withJSON(String)
方法 exists .
关于java - 使用 Java SDK 更新 DynamoDB 中的 JSON 文档属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596239/