public JDBCException convert(SQLException sqlException,
String message,
String sql) {
String sqlState = JDBCExceptionHelper.extractSqlState( sqlException );
if ( sqlState != null ) {
String sqlStateClassCode = JDBCExceptionHelper.determineSqlStateClassCode( sqlState );
if ( sqlStateClassCode != null ) {
if ( SQL_GRAMMAR_CATEGORIES.contains( sqlStateClassCode ) ) {
return new SQLGrammarException( message, sqlException, sql );
}
else if ( INTEGRITY_VIOLATION_CATEGORIES.contains( sqlStateClassCode ) ) {
String constraintName = extracter.extractConstraintName( sqlException );
return new ConstraintViolationException( message, sqlException, sql, constraintName );
}
else if ( CONNECTION_CATEGORIES.contains( sqlStateClassCode ) ) {
return new JDBCConnectionException( message, sqlException, sql );
}
else if ( DATA_CATEGORIES.contains( sqlStateClassCode ) ) {
return new DataException( message, sqlException, sql );
}
}
if ( "40001".equals( sqlState ) ) {
return new LockAcquisitionException( message, sqlException, sql );
}
if ( "61000".equals( sqlState ) ) {
// oracle sql-state code for deadlock
return new LockAcquisitionException( message, sqlException, sql );
}
}
return handledNonSpecificException( sqlException, message, sql );
}
Convert the given SQLException into Hibernate's JDBCException hierarchy. |