Сгенерированный SQL не очень правильный, так как мы должны GROUPBY все неагрегированные свойства в предложении SELECT.Например:
SELECT name,category FROM books
GROUP BY category;
Приведенный выше запрос выдаст ложные данные, поскольку он даст только 1 строку для категории (даже если работает в MySQL).Вместо этого это должно быть сделано так:
SELECT name,category FROM books
GROUP BY name,category;
РЕДАКТИРОВАТЬ : После еще нескольких исследований я понимаю, что MySQL - тот, кто не следует этому правилу.Для оптимизации запросов MySQL разрешает не полный запрос GROUP BY (по умолчанию есть возможность отключить эту функцию).Если вы выполните запрос в других базах данных, таких как Oracle или HSQLDB, вы получите ошибки.Подробный ответ можно найти в этом вопросе .
EDIT2 : чтобы переписать запрос по-своему, нет другого средства, кроме перечисления всех неагрегированных выбранныхсвойства в Group By
пункте.Начиная с Hibernate doc :
В настоящее время Hibernate также не раскрывает сгруппированную сущность, поэтому вы не можете записывать group by cat, если все свойства cat не агрегированы.Вы должны перечислить все неагрегированные свойства явно.
@ Том: Но я думаю, что, возможно, вам не нужны все поля в таблице Article.Если это так, не могли бы вы предоставить больше информации о классе домена и о том, что вы собираетесь запросить, чтобы мы могли видеть проблему яснее?