Извините, если это глупый вопрос, но я застрял с этой проблемой целый день, но не могу найти решение, потому что я не разбираюсь в сложном SQL:
Я хочу найти " Top n пользователей, отправляющих сообщения из таблицы с количеством отправленных сообщений> порог", это мои критерии:
Criteria c = session.createCriteria(Message.class);
ProjectionList plist = Projections.projectionList();
plist.add(Projections.groupProperty("user"));
plist.add(Projections.rowCount() , "count");
c.setProjection(plist);
c.addOrder(Order.desc("count"));
c.setFirstResult(0);
c.setMaxResults(count);
Это то, что я могу написать, но в нем отсутствует" фильтрация строк с rowCount ниже некоторого порога".Как это реализовать по критериям?Большое спасибо!
-------------- обновлено ------------------------
Спасибо @TheStijn, я пытался.Теперь я могу использовать подзапрос для достижения своей цели, но сгенерированный запрос не такой умный !См. Сгенерированный SQL:
select
this_.fromUser as y0_,
count(*) as y1_
from
Message this_
where
this_.fromUser is not null
and this_.created>?
and this_.created<?
and ? <= (
select
count(*) as y0_
from
Message msg_
where
msg_.fromUser=this_.fromUser
and msg_.fromUser is not null
and msg_.created>?
and msg_.created<?
)
group by
this_.fromUser
order by
y1_ desc limit ?
То есть подзапрос повторяет большую часть основного запроса , который, как мне кажется, немного избыточен.Существуют ли критерии, которые строят такие SQL-запросы:
select
this_.fromUser as y0_,
count(*) as y1_
from
Message this_
where
this_.fromUser is not null
and this_.created>?
and this_.created<?
and y1_ > ? // threshold
group by
this_.fromUser
order by
y1_ desc limit ?
Большое спасибо!
(Кажется, для этого гораздо проще использовать HQL, но мне любопытно, как работает критерий)