2016-07-26 8 views
1

Ich habe eine DynamoDB-Tabelle mit 2 Attributen - ein String für eine ID und ein JSON-Dokument. Aus meiner Forschung habe ich herausgefunden, dass es keine Möglichkeit gibt, JSON als Typ für Table.updateItem() im Java SDK anzugeben. Für mein Update möchte ich das JSON-Dokument komplett überschreiben, anstatt in ein update-spezifisches Attribut zu gehen. Ich möchte auch ein updateItem anstelle von putItem machen (da es so aussah, als könnte ich putItem verwenden, da ich das Dokument jedes Mal überschreibe), weil ich irgendwann andere Top-Level-Attribute in meiner Tabelle haben werde, die ich nicht möchte Überschreibe oder aktualisiere jedes Mal, wenn ich ein Update machen muss - ich möchte reinkommen und das Dokumentattribut nur aktualisieren und vollständig aktualisieren.Aktualisieren Sie JSON Document-Attribut in DynamoDB mit Java SDK

Ich habe etwas bekommen, das fast für meine CRUD-Operationen funktioniert, aber ich frage mich, ob es einen besseren Weg gibt. Zum Beispiel mache ich so etwas wie diese:

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

Ich wünsche, ich könnte etwas nur tun, wie diese statt:

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

Jede Hilfe oder Anregungen sehr dankbar. Vielen Dank.

Antwort

0

Heute scheint es, dass ValueMap.withJSON(String) Methode exists.

Verwandte Themen