質問

String nativeSql = "Some random non-sql stuff";
Session sess = sessionFactory.openSession();
List <?> result = sess.createSQLQuery(nativeSql).list();

In case, if nativeSql request isn't a valid one, how do I catch a native exception (ex: PSQLException)?

役に立ちましたか?

解決

Hibernate will wrap any SQLExceptions into a org.hibernate.JDBCException. So you want to catch this Exception type. If you explicitly need to access an actual PSQLException, you can retrieve it through the getSQLException() Method:

try {
    String nativeSql = "Some random non-sql stuff";
    Session sess = sessionFactory.openSession();
    List <?> result = sess.createSQLQuery(nativeSql).list();
} catch (JDBCException e) {
    SQLException sqlException = e.getSQLException;
    if (sqlException instanceof PSQLException) {
        PSQLException psqlException = (PSQLException) sqlException;
        // ... work with psqlException ...
    }
}

他のヒント

If you check the docs for the Query.list() method you'll see that it throws HibernateException. If you check the docs for HibernateException you'll see that all SQLExceptions will be wrapped in some form of JDBCException. JDBCException is a subclass of HibernateException (that's from the docs too). So you can either catch HibernateException, or JDBCException if you want to be more specific.

If you then look at the docs for JDBCException you'll find a method called getSQLException which returns the underlying SQLException. If you look at the docs for PSQLException you'll see that it extends SQLException.

AFAIK , we cannot catch SQL native exception.

You might want to catch JDBCException which

Wraps an SQLException. Indicates that an exception occurred during a JDBC call.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top