當發生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