An interface for executing a body of work in the context of a read-write transaction, with
retries for transaction aborts. See TransactionContext for a description of transaction
semantics. TransactionRunner instances are obtained by calling DatabaseClient#readWriteTransaction(TransactionOption...).
Executes a read-write transaction, with retries as necessary. The work to perform in each
transaction attempt is defined by callable, which may return an object as the result of
the work. callable will be retried if a transaction attempt aborts; implementations
must be prepared to be called more than once. Any writes buffered by callable will only
be applied if the transaction commits successfully. Similarly, the value produced by
callable will only be returned by this method if the transaction commits successfully.
callable is allowed to raise an unchecked exception. Typically this prevents further
attempts to execute callable, and the exception will propagate from this method call.
However, if a read or query in callable detected that the transaction aborted,
callable will be retried even if it raised an exception.
Allows overriding the default behaviour of blocking nested transactions.
Note that the client library does not maintain any information regarding the nesting
structure. If an outer transaction fails and an inner transaction succeeds, upon retry of the
outer transaction, the inner transaction will be re-executed.
Use with care when certain that the inner transaction is idempotent. Avoid doing this when
accessing the same db. There might be legitimate uses where access need to be made across DBs
for instance.
E.g. of nesting that is discouraged, see nestedReadWriteTxnThrows
nestedReadOnlyTxnThrows, nestedBatchTxnThrows, nestedSingleUseReadTxnThrows
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-28 UTC."],[],[],null,["# Interface TransactionRunner (6.98.1)\n\nVersion latestkeyboard_arrow_down\n\n- [6.98.1 (latest)](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.TransactionRunner)\n- [6.98.0](/java/docs/reference/google-cloud-spanner/6.98.0/com.google.cloud.spanner.TransactionRunner)\n- [6.97.1](/java/docs/reference/google-cloud-spanner/6.97.1/com.google.cloud.spanner.TransactionRunner)\n- [6.96.1](/java/docs/reference/google-cloud-spanner/6.96.1/com.google.cloud.spanner.TransactionRunner)\n- [6.95.1](/java/docs/reference/google-cloud-spanner/6.95.1/com.google.cloud.spanner.TransactionRunner)\n- [6.94.0](/java/docs/reference/google-cloud-spanner/6.94.0/com.google.cloud.spanner.TransactionRunner)\n- [6.93.0](/java/docs/reference/google-cloud-spanner/6.93.0/com.google.cloud.spanner.TransactionRunner)\n- [6.89.0](/java/docs/reference/google-cloud-spanner/6.89.0/com.google.cloud.spanner.TransactionRunner)\n- [6.88.0](/java/docs/reference/google-cloud-spanner/6.88.0/com.google.cloud.spanner.TransactionRunner)\n- [6.87.0](/java/docs/reference/google-cloud-spanner/6.87.0/com.google.cloud.spanner.TransactionRunner)\n- [6.86.0](/java/docs/reference/google-cloud-spanner/6.86.0/com.google.cloud.spanner.TransactionRunner)\n- [6.85.0](/java/docs/reference/google-cloud-spanner/6.85.0/com.google.cloud.spanner.TransactionRunner)\n- [6.83.0](/java/docs/reference/google-cloud-spanner/6.83.0/com.google.cloud.spanner.TransactionRunner)\n- [6.82.0](/java/docs/reference/google-cloud-spanner/6.82.0/com.google.cloud.spanner.TransactionRunner)\n- [6.80.1](/java/docs/reference/google-cloud-spanner/6.80.1/com.google.cloud.spanner.TransactionRunner)\n- [6.79.0](/java/docs/reference/google-cloud-spanner/6.79.0/com.google.cloud.spanner.TransactionRunner)\n- [6.77.0](/java/docs/reference/google-cloud-spanner/6.77.0/com.google.cloud.spanner.TransactionRunner)\n- [6.74.1](/java/docs/reference/google-cloud-spanner/6.74.1/com.google.cloud.spanner.TransactionRunner)\n- [6.72.0](/java/docs/reference/google-cloud-spanner/6.72.0/com.google.cloud.spanner.TransactionRunner)\n- [6.71.0](/java/docs/reference/google-cloud-spanner/6.71.0/com.google.cloud.spanner.TransactionRunner)\n- [6.69.0](/java/docs/reference/google-cloud-spanner/6.69.0/com.google.cloud.spanner.TransactionRunner)\n- [6.68.0](/java/docs/reference/google-cloud-spanner/6.68.0/com.google.cloud.spanner.TransactionRunner)\n- [6.66.0](/java/docs/reference/google-cloud-spanner/6.66.0/com.google.cloud.spanner.TransactionRunner)\n- [6.65.1](/java/docs/reference/google-cloud-spanner/6.65.1/com.google.cloud.spanner.TransactionRunner)\n- [6.62.0](/java/docs/reference/google-cloud-spanner/6.62.0/com.google.cloud.spanner.TransactionRunner)\n- [6.60.0](/java/docs/reference/google-cloud-spanner/6.60.0/com.google.cloud.spanner.TransactionRunner)\n- [6.58.0](/java/docs/reference/google-cloud-spanner/6.58.0/com.google.cloud.spanner.TransactionRunner)\n- [6.57.0](/java/docs/reference/google-cloud-spanner/6.57.0/com.google.cloud.spanner.TransactionRunner)\n- [6.56.0](/java/docs/reference/google-cloud-spanner/6.56.0/com.google.cloud.spanner.TransactionRunner)\n- [6.55.0](/java/docs/reference/google-cloud-spanner/6.55.0/com.google.cloud.spanner.TransactionRunner)\n- [6.54.0](/java/docs/reference/google-cloud-spanner/6.54.0/com.google.cloud.spanner.TransactionRunner)\n- [6.53.0](/java/docs/reference/google-cloud-spanner/6.53.0/com.google.cloud.spanner.TransactionRunner)\n- [6.52.1](/java/docs/reference/google-cloud-spanner/6.52.1/com.google.cloud.spanner.TransactionRunner)\n- [6.51.0](/java/docs/reference/google-cloud-spanner/6.51.0/com.google.cloud.spanner.TransactionRunner)\n- [6.50.1](/java/docs/reference/google-cloud-spanner/6.50.1/com.google.cloud.spanner.TransactionRunner)\n- [6.49.0](/java/docs/reference/google-cloud-spanner/6.49.0/com.google.cloud.spanner.TransactionRunner)\n- [6.25.1](/java/docs/reference/google-cloud-spanner/6.25.1/com.google.cloud.spanner.TransactionRunner)\n- [6.24.0](/java/docs/reference/google-cloud-spanner/6.24.0/com.google.cloud.spanner.TransactionRunner)\n- [6.23.4](/java/docs/reference/google-cloud-spanner/6.23.4/com.google.cloud.spanner.TransactionRunner)\n- [6.22.0](/java/docs/reference/google-cloud-spanner/6.22.0/com.google.cloud.spanner.TransactionRunner)\n- [6.21.2](/java/docs/reference/google-cloud-spanner/6.21.2/com.google.cloud.spanner.TransactionRunner)\n- [6.20.0](/java/docs/reference/google-cloud-spanner/6.20.0/com.google.cloud.spanner.TransactionRunner)\n- [6.19.1](/java/docs/reference/google-cloud-spanner/6.19.1/com.google.cloud.spanner.TransactionRunner)\n- [6.18.0](/java/docs/reference/google-cloud-spanner/6.18.0/com.google.cloud.spanner.TransactionRunner)\n- [6.17.4](/java/docs/reference/google-cloud-spanner/6.17.4/com.google.cloud.spanner.TransactionRunner)\n- [6.14.1](/java/docs/reference/google-cloud-spanner/6.14.1/com.google.cloud.spanner.TransactionRunner) \n\n public interface TransactionRunner\n\nAn interface for executing a body of work in the context of a read-write transaction, with\nretries for transaction aborts. See [TransactionContext](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.TransactionContext) for a description of transaction\nsemantics. `TransactionRunner` instances are obtained by calling [DatabaseClient#readWriteTransaction(TransactionOption...)](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.DatabaseClient#com_google_cloud_spanner_DatabaseClient_readWriteTransaction_).\n\nA `TransactionRunner` instance can only be used for a single invocation of [#run(TransactionCallable)](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.TransactionRunner#com_google_cloud_spanner_TransactionRunner_run_).\n\nMethods\n-------\n\n### \\\u003cT\\\u003erun(TransactionRunner.TransactionCallable\\\u003cT\\\u003e callable)\n\n public abstract T \u003cT\u003erun(TransactionRunner.TransactionCallable\u003cT\u003e callable)\n\nExecutes a read-write transaction, with retries as necessary. The work to perform in each\ntransaction attempt is defined by `callable`, which may return an object as the result of\nthe work. `callable` will be retried if a transaction attempt aborts; implementations\nmust be prepared to be called more than once. Any writes buffered by `callable` will only\nbe applied if the transaction commits successfully. Similarly, the value produced by `\ncallable` will only be returned by this method if the transaction commits successfully.\n\n`callable` is allowed to raise an unchecked exception. Typically this prevents further\nattempts to execute `callable`, and the exception will propagate from this method call.\nHowever, if a read or query in `callable` detected that the transaction aborted, `\ncallable` will be retried even if it raised an exception.\n\n### allowNestedTransaction()\n\n public abstract TransactionRunner allowNestedTransaction()\n\nAllows overriding the default behaviour of blocking nested transactions.\n\nNote that the client library does not maintain any information regarding the nesting\nstructure. If an outer transaction fails and an inner transaction succeeds, upon retry of the\nouter transaction, the inner transaction will be re-executed.\n\nUse with care when certain that the inner transaction is idempotent. Avoid doing this when\naccessing the same db. There might be legitimate uses where access need to be made across DBs\nfor instance.\n\nE.g. of nesting that is discouraged, see `nestedReadWriteTxnThrows` `\nnestedReadOnlyTxnThrows`, `nestedBatchTxnThrows`, `nestedSingleUseReadTxnThrows`\n\n### getCommitResponse()\n\n public abstract CommitResponse getCommitResponse()\n\nReturns the [CommitResponse](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.CommitResponse) of this transaction.\n\n### getCommitTimestamp()\n\n public abstract Timestamp getCommitTimestamp()\n\nReturns the timestamp at which the transaction committed. This method may only be called once\n[#run(TransactionCallable)](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.TransactionRunner#com_google_cloud_spanner_TransactionRunner_run_) has returned normally."]]