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

Batches: How to Send Multiple Commands Using a Batch

To send multiple commands in a single request, reducing the number of remote calls and allowing several operations to share same transaction, BatchCommand should be used.

Syntax

public BatchCommand(DocumentConventions conventions, List<ICommandData> commands, BatchOptions options)

The following commands can be sent using a batch

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

Batch Options

public class BatchOptions {
    private boolean waitForReplicas;
    private int numberOfReplicasToWaitFor;
    private Duration waitForReplicasTimeout;
    private boolean majority;
    private boolean throwOnTimeoutInWaitForReplicas;

    private boolean waitForIndexes;
    private Duration waitForIndexesTimeout;
    private boolean throwOnTimeoutInWaitForIndexes;
    private String[] waitForSpecificIndexes;

    // getters and setters
}

Example

try (IDocumentSession session = documentStore.openSession()) {

    ObjectNode user3 = mapper.createObjectNode();
    user3.put("Name", "James");

    PutCommandDataWithJson user3Cmd = new PutCommandDataWithJson("users/3", null, user3);

    DeleteCommandData deleteCmd = new DeleteCommandData("users/2-A", null);
    List<ICommandData> commands = Arrays.asList(user3Cmd, deleteCmd);

    BatchCommand batch = new BatchCommand(documentStore.getConventions(), commands);
    session.advanced().getRequestExecutor().execute(batch);

}

Note

All the commands in the batch will succeed or fail as a transaction. Other users will not be able to see any of the changes until the entire batch completes.