Критерий запроса: порядок по количеству - PullRequest
4 голосов
/ 11 февраля 2011

Я пытаюсь выполнить запрос критерия, который возвращает наиболее часто задаваемые вопросы в стеке, например faq.

Вопрос содержит несколько ответов.

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

Кто-нибудь знает, что я должен использовать в утилитных критериях спящего режима?

1 Ответ

8 голосов
/ 11 февраля 2011
Criteria criteria = session.createCriteria(Question.class, "q");
criteria.createAlias("q.answers", "answer", Criteria.LEFT_JOIN);
criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("q.id"))
                                                   .add(Projections.count("answer.id").as("numberOfAnswers")));
criteria.addOrder(Order.desc("numberOfAnswers"));

Это вернет вам список объектов [].Каждый объект [] содержит идентификатор вопроса в качестве первого элемента и количество ответов на этот вопрос в качестве второго элемента.вопросы сортируются по убыванию количества ответов.

Если вам нужны дополнительные свойства (пример: текст вопроса), добавьте дополнительные проекции groupProperty (пример: add(Projections.groupProperty("q.text")))

SQL, соответствующийэтот критерий запроса выглядит следующим образом:

select this_.ID_QUESTION as y0_, count(answer1_.ID_ANSWER) as y1_ from QUESTION this_ left outer join ANSWER answer1_ on this_.ID_QUESTION=answer1_.ID_QUESTION group by this_.ID_QUESTION order by y1_ desc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...