我正在修復我們正在通過Hibernate/DBUnit進行測試的項目的測試套件。有幾個測試用例都拋出了與Hibernate類似的異常,如下所示:SQL查詢拋出「不是在聚合函數或group by子句」異常
java.sql.SQLException:不在聚合函數或group by子句中:[email protected] in statement [ ... blah ...]
通過我的谷歌搜索,我懷疑這是由於我們使用聚合函數AVG(),因爲這是在異常的消息中,以及所有的查詢拋出包含它。但是,我發現了幾條鏈接,指向發生此錯誤的人員,並且可以通過註釋「ORDER BY」或「GROUP BY」子句或通過在分組中包含SELECT子句中的其他列來修復它。我明白爲什麼這會解決這樣一個錯誤信息,但我不確定它是否適用於我的情況,因爲我試着做同樣的事情,但沒有任何區別。另外,我們有一些測試用例拋出使用ORDER/GROUP的異常,但不是全部。例如:
ThingerVO myThinger = (ThingerVO)session.createQuery("SELECT new ThingerVO(" +
"r.id, " + "u.id, " + "u.alias, " + "s.id, " +
"s.name, " + "r.URL," + "AVG(v.rating), " +
"r.totalCount, " + "r.isPrivate, " + "a.id, " +
"a.name, " + "r.transactionId, " + "r.size, " +
"u.hasPicture " +
") FROM Thinger r LEFT OUTER JOIN r.votes as v, Table1S s " +
"JOIN s.Table2A AS a, User u " +
"WHERE r.userId = u.id AND " +
"s.id = r.Table1SId AND " +
"r.id = :thingId")
.setInteger("thingId", thingId)
.uniqueResult();
該查詢也會導致拋出同樣的異常,即使它不使用ORDER/GROUP子句。另外,我將從Hibernate生成的HSQL代碼直接剪切/粘貼到MySQL查詢瀏覽器中,並且運行沒有問題。另外,值得指出的是,所有這些代碼在我們的生產數據庫上都能正常工作,所以我很困惑它爲什麼在這裏拋出。
一些其他可能有用的信息 - 我們使用一個平面XML數據庫結構,其中包含一些測試用例的虛擬測試數據以及用於hibernate的MySQL方言。我們使用的是dbunit 2.4.3/hibernate 3.2.6。我嘗試使用最新的休眠,版本3.3.1,但它表現相同。
任何指針或提示將不勝感激。
好吧,我可以讓SWORN將我的SELECT子句中的所有列添加到GROUP BY中,但我想這就是我在夜間的凌晨調試時所得到的結果。無論如何,添加所有這些列(顯然減去AVG列)現在可以解決問題。謝謝! – 2009-02-24 11:19:15