Hibernate/DBUnit を介してテストされている私たちのプロジェクトのテスト スイートの修復に取り組んでいます。次のような Hibernate から同様の例外をスローするいくつかのテスト ケースがあります。
java.sql.SQLException: 集計関数または group by 句ではありません: ステートメント内の org.hsqldb.Expression@109062e [... 何とか ...]
グーグルで調べたところ、これは集計関数 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 句を使用していないにもかかわらず、同じ例外がスローされます。また、生成された HSQL コードを Hibernate から直接 MySQL クエリ ブラウザにカット アンド ペーストしたところ、問題なく実行されました。また、このコードはすべて実稼働データベースで正常に機能することを指摘しておく価値があるため、なぜここでスローされるのか、私は本当に混乱しています.
その他の潜在的に役立つ情報 - テスト ケース用のダミー テスト データと休止状態用の MySQL ダイアレクトを含むフラットな XML データベース構造を使用しています。dbunit 2.4.3/hibernate 3.2.6 を使用しています。最新の休止状態バージョン 3.3.1 を使用してみましたが、同じように動作しました。
ポインタやヒントは大歓迎です。