Я работаю над исправлением набора тестов для нашего проекта, который тестируется через Hibernate/DBUnit. Есть несколько тестовых случаев, которые выдают похожее исключение из Hibernate, которое выглядит примерно так:
java.sql.SQLException: не в агрегированной функции или группе по предложению: 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, и он заработал без проблем. Кроме того, стоит отметить, что весь этот код отлично работает в нашей производственной базе данных, поэтому я действительно не понимаю, почему он выбрасывает сюда.
Некоторая другая потенциально полезная информация — мы используем плоскую структуру базы данных XML с некоторыми фиктивными тестовыми данными для тестовых случаев и диалектом MySQL для гибернации. Мы используем dbunit 2.4.3/спящий режим 3.2.6. Я пытался использовать последнюю версию спящего режима 3.3.1, но она вел себя так же.
Любые указатели или подсказки будут очень признательны.