org.springframework.jdbc.support

## Class AbstractFallbackSQLExceptionTranslator

- java.lang.Object
- - org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator

- All Implemented Interfaces:
    SQLExceptionTranslator
  Direct Known Subclasses:
    SQLErrorCodeSQLExceptionTranslator, SQLExceptionSubclassTranslator, SQLStateSQLExceptionTranslator

      public abstract class AbstractFallbackSQLExceptionTranslator
      extends Object
      implements SQLExceptionTranslator

  Base class for `SQLExceptionTranslator` implementations that allow for fallback to some other `SQLExceptionTranslator`.
  Since:
    2.5.6
  Author:
    Juergen Hoeller

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Log` | `logger` Logger available to subclasses

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractFallbackSQLExceptionTranslator()`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected String` | `buildMessage(String task, String sql, SQLException ex)` Build a message `String` for the given `SQLException`.
    `protected abstract DataAccessException` | `doTranslate(String task, String sql, SQLException ex)` Template method for actually translating the given exception.
    `SQLExceptionTranslator` | `getFallbackTranslator()` Return the fallback exception translator, if any.
    `void` | `setFallbackTranslator(SQLExceptionTranslator fallback)` Override the default SQL state fallback translator (typically a `SQLStateSQLExceptionTranslator`).
    `DataAccessException` | `translate(String task, String sql, SQLException ex)` Pre-checks the arguments, calls `doTranslate(java.lang.String, java.lang.String, java.sql.SQLException)`, and invokes the `fallback translator` if necessary.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### logger

          protected final Log logger

      Logger available to subclasses

  - ### Constructor Detail

    - #### AbstractFallbackSQLExceptionTranslator

          public AbstractFallbackSQLExceptionTranslator()

  - ### Method Detail

    - #### setFallbackTranslator

          public void setFallbackTranslator(SQLExceptionTranslator fallback)

      Override the default SQL state fallback translator (typically a `SQLStateSQLExceptionTranslator`).

    - #### getFallbackTranslator

          public SQLExceptionTranslator getFallbackTranslator()

      Return the fallback exception translator, if any.

    - #### translate

          public DataAccessException translate(String task,
                                               String sql,
                                               SQLException ex)

      Pre-checks the arguments, calls `doTranslate(java.lang.String, java.lang.String, java.sql.SQLException)`, and invokes the `fallback translator` if necessary.
      Specified by:
        `translate` in interface `SQLExceptionTranslator`
      Parameters:
        `task` - readable text describing the task being attempted
        `sql` - SQL query or update that caused the problem (may be `null`)
        `ex` - the offending `SQLException`
      Returns:
        the DataAccessException, wrapping the `SQLException`
      See Also:
        `NestedRuntimeException.getRootCause()`

    - #### doTranslate

          protected abstract DataAccessException doTranslate(String task,
                                                             String sql,
                                                             SQLException ex)

      Template method for actually translating the given exception.

      The passed-in arguments will have been pre-checked. Furthermore, this method is allowed to return `null` to indicate that no exception match has been found and that fallback translation should kick in.

      Parameters:
        `task` - readable text describing the task being attempted
        `sql` - SQL query or update that caused the problem (may be `null`)
        `ex` - the offending `SQLException`
      Returns:
        the DataAccessException, wrapping the `SQLException`; or `null` if no exception match found

    - #### buildMessage

          protected String buildMessage(String task,
                                        String sql,
                                        SQLException ex)

      Build a message `String` for the given `SQLException`.

      To be called by translator subclasses when creating an instance of a generic `DataAccessException` class.

      Parameters:
        `task` - readable text describing the task being attempted
        `sql` - the SQL statement that caused the problem (may be `null`)
        `ex` - the offending `SQLException`
      Returns:
        the message `String` to use