code: public final CommitResponse commit(
        SessionName session, ByteString transactionId, List<Mutation> mutations) {
  
      CommitRequest request =
          CommitRequest.newBuilder()
              .setSession(session == null ? null : session.toString())
              .setTransactionId(transactionId)
              .addAllMutations(mutations)
              .build();
      return commit(request);
    }
docs: Commits a transaction. The request includes the mutations to be applied to rows in the
  database.
  
  <p>`Commit` might return an `ABORTED` error. This can occur at any time; commonly, the cause is
  conflicts with concurrent transactions. However, it can also happen for a variety of other
  reasons. If `Commit` returns `ABORTED`, the caller should re-attempt the transaction from the
  beginning, re-using the same session.
  
  <p>Sample code:
  
  <pre><code>
  try (SpannerClient spannerClient = SpannerClient.create()) {
  SessionName session = SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]");
  ByteString transactionId = ByteString.copyFromUtf8("");
  List&lt;Mutation&gt; mutations = new ArrayList&lt;&gt;();
  CommitResponse response = spannerClient.commit(session, transactionId, mutations);
  }
  </code></pre>
  
  @param session Required. The session in which the transaction to be committed is running.
  @param transactionId Commit a previously-started transaction.
  @param mutations The mutations to be executed when this transaction commits. All mutations are
  applied atomically, in the order they appear in this list.
  @throws com.google.api.gax.rpc.ApiException if the remote call fails