Session: How to Defer Operations

Operations can be deferred till saveChanges is called by using defer method in advanced session operations. There are three types of commands that can be deferred:

  • PutCommandData
  • DeleteCommandData
  • DeletePrefixedCommandData
  • PatchCommandData
  • PutAttachmentCommandData
  • DeleteAttachmentCommandData

Syntax

void defer(ICommandData command, ICommandData... commands);

void defer(ICommandData[] commands);
Parameters
ICommandData Command to be executed.  
ICommandData[] Array of commands implementing ICommandData interface.  

Example

Map<String, Object> value1 = new HashMap<>();
value1.put("Name", "My Product");
value1.put("Supplier", "suppliers/999-A");
value1.put("@metadata", Collections.singletonMap("@collection", "Users"));

PutCommandDataWithJson putCommand1 =
    new PutCommandDataWithJson("products/999-A",
        null,
        store.getConventions().getEntityMapper().valueToTree(value1));

HashMap<String, Object> value2 = new HashMap<>();
value2.put("Name", "My Product");
value2.put("Supplier", "suppliers/999-A");
value2.put("@metadata", Collections.singletonMap("@collection", "Suppliers"));

PutCommandDataWithJson putCommand2 =
    new PutCommandDataWithJson("suppliers/999-A",
        null,
        store.getConventions().getEntityMapper().valueToTree(value2));

DeleteCommandData command3 = new DeleteCommandData("products/1-A", null);

session.advanced().defer(putCommand1, putCommand2, command3);