public static OrmSqlException doTranslate(final String task, final String sql, final SQLException ex) { String sqlState = getSqlState(ex); if ((sqlState != null) && (sqlState.length() >= 2)) { String classCode = sqlState.substring(0, 2); if (BAD_SQL_GRAMMAR_CODES.contains(classCode)) { return new OrmSqlBadGrammarException(buildMessage(task, sql, ex), ex); } else if (DATA_INTEGRITY_VIOLATION_CODES.contains(classCode)) { return new OrmSqlDataIntegrityViolationException(buildMessage(task, sql, ex), ex); } else if (DATA_ACCESS_RESOURCE_FAILURE_CODES.contains(classCode)) { return new OrmSqlDataAccessResourceFailureException(buildMessage(task, sql, ex), ex); } else if (TRANSIENT_DATA_ACCESS_RESOURCE_CODES.contains(classCode)) { return new OrmSqlTransientDataAccessResourceException(buildMessage(task, sql, ex), ex); } else if (CONCURRENCY_FAILURE_CODES.contains(classCode)) { return new OrmSqlConcurrencyFailureException(buildMessage(task, sql, ex), ex); } } return new OrmSqlException(buildMessage(task, sql, ex), ex); }