У меня есть запрос на основе критериев со следующей группировкой:
Projections.projectionList()
.add(Property.forName("xyz").group()));
Сгенерированный SQL (проприетарный, такой очищенный):
select this_.XYZ as y0_ from FOO.BAR this_ WHERE [long where clause]
group by this_.XYZ
Теперь, концептуально, я хочу обернуть результаты запроса счетчиком (*) так, чтобы данные никогда не возвращались из базы данных, только счет. Как это:
select count(*) from (
select this_.XYZ as y0_ from FOO.BAR this_ WHERE [long where clause]
group by this_.XYZ
)
Могут быть тысячи строк, которые мне не нужны, и я заинтересован в высокой производительности, поэтому я не хочу, чтобы эти данные передавались по сети.
Мой критерий поиска имеет множество условий. Я не могу реально восстановить его, поэтому мне действительно нужно придерживаться критериев.
Добавление rowCount или count ("xyz"), конечно, не помогает, потому что он просто сообщает 1 для каждой строки.
В настоящее время я делаю это, чтобы получить счет:
ScrollableResults scroll = criteria.scroll();
scroll.last();
int count = scroll.getRowNumber();
Это работает, но требуется много времени, чтобы вернуться с подсчетом (на Oracle, если это имеет значение).
Могу ли я сделать то, что я предлагаю?