org.hibernate.exception.SQLGrammarException: could not extract ResultSet解決方案

亦生菌發表於2021-01-01

使用SSH框架連線資料庫查詢,
詳細報錯如下:

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
		at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
		at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1542)

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet的報錯是由查詢語句Query queryObject = getSession().createQuery(queryString);造成的,原因總體來說就是資料庫查詢失敗。
查詢失敗基本都是由於HQL語句轉為SQL語句出錯引起的,下面列出幾種可能的原因:

  1. 資料庫連線設定的dialect不對。
  2. HQL語句寫錯了。
  3. 用到的實體類寫錯了
  4. 用到的實體類對映檔案hbm.xml寫錯了。

為了找到錯誤原因,我們可以在控制檯檢查HQL語句和SQL語句。
不會控制檯顯示HQL語句和SQL語句的小夥伴看這裡:SSH框架控制檯輸出HQL語句和SQL語句的方法

紅框內的是HQL語句,紅框後面select開始的是對應的SQL語句。
在這裡插入圖片描述
檢查SQL語句時,如果覺得SQL語句太長太複雜,可以把它放到資料庫裡執行一下,可以很快得到答案。
在這裡插入圖片描述
這樣做下來,想來應該對這個bug有些頭緒了吧。

相關文章