Я работаю над ремонтом тестового набора для нашего проекта, который тестируется через Hibernate / DBUnit. Существует несколько тестовых случаев, которые выдают похожее исключение из Hibernate, которое выглядит примерно так:
java.sql.SQLException: Не в агрегатной функции или группе по выражению: org.hsqldb.Expression@109062e в выражении [... blah ...]
Из-за моего поиска в Google я подозреваю, что это вызвано тем, что мы используем агрегатную функцию 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 / hibernate 3.2.6. Я пытался использовать последнюю версию hibernate, версии 3.3.1, но он вел себя так же.
Любые указатели или подсказки будут с благодарностью.