Cloud Spanner can abort any read/write transaction because of potential deadlocks or other
internal reasons. When a transaction is aborted, the entire transaction should be retried. A
Connection can automatically retry a transaction internally and check whether the results
that are returned during a retry attempt are equal to the results during the original
transaction. This is done by keeping track of a SHA-256 checksum of all the results that are
returned by Spanner during both transactions.
An internally assigned ID of the transaction (unique during the lifetime
of the JVM) that can be used to identify the transaction for logging purposes.
An internally assigned ID of the transaction (unique during the lifetime
of the JVM) that can be used to identify the transaction for logging purposes.
[[["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 TransactionRetryListener (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.connection.TransactionRetryListener)\n- [6.98.0](/java/docs/reference/google-cloud-spanner/6.98.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.97.1](/java/docs/reference/google-cloud-spanner/6.97.1/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.96.1](/java/docs/reference/google-cloud-spanner/6.96.1/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.95.1](/java/docs/reference/google-cloud-spanner/6.95.1/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.94.0](/java/docs/reference/google-cloud-spanner/6.94.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.93.0](/java/docs/reference/google-cloud-spanner/6.93.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.89.0](/java/docs/reference/google-cloud-spanner/6.89.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.88.0](/java/docs/reference/google-cloud-spanner/6.88.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.87.0](/java/docs/reference/google-cloud-spanner/6.87.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.86.0](/java/docs/reference/google-cloud-spanner/6.86.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.85.0](/java/docs/reference/google-cloud-spanner/6.85.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.83.0](/java/docs/reference/google-cloud-spanner/6.83.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.82.0](/java/docs/reference/google-cloud-spanner/6.82.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.80.1](/java/docs/reference/google-cloud-spanner/6.80.1/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.79.0](/java/docs/reference/google-cloud-spanner/6.79.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.77.0](/java/docs/reference/google-cloud-spanner/6.77.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.74.1](/java/docs/reference/google-cloud-spanner/6.74.1/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.72.0](/java/docs/reference/google-cloud-spanner/6.72.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.71.0](/java/docs/reference/google-cloud-spanner/6.71.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.69.0](/java/docs/reference/google-cloud-spanner/6.69.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.68.0](/java/docs/reference/google-cloud-spanner/6.68.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.66.0](/java/docs/reference/google-cloud-spanner/6.66.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.65.1](/java/docs/reference/google-cloud-spanner/6.65.1/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.62.0](/java/docs/reference/google-cloud-spanner/6.62.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.60.0](/java/docs/reference/google-cloud-spanner/6.60.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.58.0](/java/docs/reference/google-cloud-spanner/6.58.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.57.0](/java/docs/reference/google-cloud-spanner/6.57.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.56.0](/java/docs/reference/google-cloud-spanner/6.56.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.55.0](/java/docs/reference/google-cloud-spanner/6.55.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.54.0](/java/docs/reference/google-cloud-spanner/6.54.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.53.0](/java/docs/reference/google-cloud-spanner/6.53.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.52.1](/java/docs/reference/google-cloud-spanner/6.52.1/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.51.0](/java/docs/reference/google-cloud-spanner/6.51.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.50.1](/java/docs/reference/google-cloud-spanner/6.50.1/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.49.0](/java/docs/reference/google-cloud-spanner/6.49.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.25.1](/java/docs/reference/google-cloud-spanner/6.25.1/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.24.0](/java/docs/reference/google-cloud-spanner/6.24.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.23.4](/java/docs/reference/google-cloud-spanner/6.23.4/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.22.0](/java/docs/reference/google-cloud-spanner/6.22.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.21.2](/java/docs/reference/google-cloud-spanner/6.21.2/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.20.0](/java/docs/reference/google-cloud-spanner/6.20.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.19.1](/java/docs/reference/google-cloud-spanner/6.19.1/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.18.0](/java/docs/reference/google-cloud-spanner/6.18.0/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.17.4](/java/docs/reference/google-cloud-spanner/6.17.4/com.google.cloud.spanner.connection.TransactionRetryListener)\n- [6.14.1](/java/docs/reference/google-cloud-spanner/6.14.1/com.google.cloud.spanner.connection.TransactionRetryListener) \n\n public interface TransactionRetryListener\n\nCloud Spanner can abort any read/write transaction because of potential deadlocks or other\ninternal reasons. When a transaction is aborted, the entire transaction should be retried. A\n[Connection](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.connection.Connection) can automatically retry a transaction internally and check whether the results\nthat are returned during a retry attempt are equal to the results during the original\ntransaction. This is done by keeping track of a SHA-256 checksum of all the results that are\nreturned by Spanner during both transactions.\n\nThis listener class for internal transaction retries allow client applications to do\nadditional testing or logging of transaction retries. Transaction retry listeners of a [Connection](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.connection.Connection) can be added using [Connection#addTransactionRetryListener(TransactionRetryListener)](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.connection.Connection#com_google_cloud_spanner_connection_Connection_addTransactionRetryListener_com_google_cloud_spanner_connection_TransactionRetryListener_).\n\nMethods\n-------\n\n### retryDmlAsPartitionedDmlFailed(UUID executionId, Statement statement, Throwable exception)\n\n public default void retryDmlAsPartitionedDmlFailed(UUID executionId, Statement statement, Throwable exception)\n\nThis method is called when an atomic DML statement failed to be retried as a Partitioned DML\nstatement.\n\n### retryDmlAsPartitionedDmlFinished(UUID executionId, Statement statement, long lowerBoundUpdateCount)\n\n public default void retryDmlAsPartitionedDmlFinished(UUID executionId, Statement statement, long lowerBoundUpdateCount)\n\nThis method is called when an atomic DML statement has been successfully retried as a\nPartitioned DML statement.\n\n### retryDmlAsPartitionedDmlStarting(UUID executionId, Statement statement, TransactionMutationLimitExceededException exception)\n\n public default void retryDmlAsPartitionedDmlStarting(UUID executionId, Statement statement, TransactionMutationLimitExceededException exception)\n\nThis method is called when an atomic DML statement is retried as a Partitioned DML statement.\n\n### retryFinished(Timestamp transactionStarted, long transactionId, int retryAttempt, TransactionRetryListener.RetryResult result)\n\n public abstract void retryFinished(Timestamp transactionStarted, long transactionId, int retryAttempt, TransactionRetryListener.RetryResult result)\n\nThis method is called when a retry has finished.\n\n### retryStarting(Timestamp transactionStarted, long transactionId, int retryAttempt)\n\n public abstract void retryStarting(Timestamp transactionStarted, long transactionId, int retryAttempt)\n\nThis method is called when a retry is about to start."]]