Как упорядочить по количеству() в JPA

Я использую этот JPA-запрос:

SELECT DISTINCT e.label FROM Entity e 
GROUP BY e.label 
ORDER BY COUNT(e.label) DESC

Я не получаю ошибок, и результаты отсортированы почти правильно, но есть неправильные значения (либо два значения перевернуты, либо некоторые отдельные значения полностью неуместны)

ИЗМЕНИТЬ:

Добавление COUNT(e.label) к моему предложению SELECT решает эту проблему для этого запроса.

Но в аналогичном запросе, который также содержит предложение WHERE, проблема сохраняется:

SELECT DISTINCT e.label, COUNT(e.label) FROM Entity e 
WHERE TYPE(e.cat) = :category 
GROUP BY e.label 
ORDER BY COUNT(e.label) DESC

person Martin Schlagnitweit    schedule 09.08.2011    source источник
comment
Вы уверены, что можете правильно передать параметр :category в качестве параметра? Попробуйте поместить нужный тип класса непосредственно в SQL.   -  person MicSim    schedule 09.08.2011
comment
Переход в :category работает нормально.   -  person Martin Schlagnitweit    schedule 09.08.2011


Ответы (3)


По какой-то причине следующий стиль запроса с именем не работал у меня:

SELECT DISTINCT e.label, COUNT(e.label) 
FROM Entity e 
GROUP BY e.label 
ORDER BY COUNT(e.label) DESC

Это может быть потому, что я использую старую версию Hibernate. Я получил заказ, работая с числом, чтобы выбрать столбец для сортировки следующим образом:

SELECT DISTINCT e.label, COUNT(e.label) 
FROM Entity e 
GROUP BY e.label 
ORDER BY 2 DESC
person DavidW    schedule 18.01.2012

Не понимаю, как порядок может быть неправильным. Что такое неправильный результат?

Что такое SQL, который генерируется, если вы попробуете тот же SQL непосредственно в базе данных, даст ли он тот же неправильный порядок?

Какую базу данных вы используете?

Вместо этого вы всегда можете сортировать в Java, используя sort().

person James    schedule 10.08.2011
comment
Не будет ли сортировка в java неэффективной, поскольку вам придется получать все данные из базы данных в память java? - person exic; 12.10.2012

person    schedule
comment
Это сработало для первого запроса, но не для другого запроса, в котором есть предложение WHERE. - person Martin Schlagnitweit; 09.08.2011