当 org.hibernate.JDBCException 发生(或此异常的子类型)时,sql 语句在 Stacktrace 中不可见。
例如,如果我使用 hibernate 执行以下 SQL 语句(在没有表或视图“nonexsiting”的 Oracle DB 上):
session.createSQLQuery("select * from nonexisting").list();
我得到以下堆栈跟踪:
org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
...
Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: Table or view does not exist
...
SQL 语句未显示在堆栈跟踪中,但是 Exception 对象存储了信息并且可以通过exception.getSQL()
. 如果堆栈跟踪中也提供此信息,它将极大地加快调试速度。
有人知道为什么堆栈跟踪中没有这些信息吗?或者如何在堆栈跟踪中启用此信息的输出?
顺便说一下,我在这个例子中使用的休眠版本是 3.3.1