当发生org.hibernate.JDBCException(或此异常的子类型)时,sql语句在Stacktrace中不可见。为什么org.hibernate.JDBCException不在堆栈跟踪中打印sql语句
例如,如果我执行与休眠以下SQL语句(在Oracle DB不具有表或视图“nonexsiting”):
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()
访问。如果这个信息在堆栈跟踪中可用,它将极大地加快调试速度。
任何人有一个想法,为什么这个信息不可用在堆栈跟踪?或者如何在堆栈跟踪中启用此信息的输出?
通过Hibernate的版本,我用这个例子的方法是3.3.1
将信息导入堆栈跟踪的一种方式是重新抛出异常,并将抛出的异常信息中的sql语句放入重新抛出异常的“消息”部分。 尽管如此,我仍然没有看到为什么默认情况下没有这样做...... 例如:throw new JDBCException(e.getMessage()+“”+ e.getSQL(),e.getSQLException(),e.getSQL ) 我仍然没有看到没有理由为什么这不是默认做的... – hochraldo 2010-07-28 11:51:40