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;