You are currently browsing legacy 4.0 version of documentation. Click here to switch to the newest 4.2 version.

We can help you with migration to the latest RavenDB

Contact Us Now
see on GitHub

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