Как сгенерировать запрос количества с критериями api
Я хочу подсчитать результаты, возвращаемые запросами, которые построены с критериями API. Я не хочу переписывать ни один из этих запросов. Я старался
(Integer)criteria.setProjection(Projections.rowCount()).uniqueResult();
который может работать, но в зависимости от объединений и ограничений, Hibernate 3.2.4 будет генерировать
недопустимый sql (DB2: com.ibm.db2.jcc.b.co: DB2 SQL Error: SQLCODE=-119, SQLSTATE=42803, что означает "КОЛОНКА ИЛИ ВЫРАЖЕНИЕ В ОБЪЕДИНЕНИИ ОБЪЕДИНЕНИЯ НЕДОПУСТИМО"). Пример ниже...
Если оригинальный sql
select * from ... where ... order by ...
тогда проекция подсчета в основном просто заменяет * на count(*)
который дает что-то вроде
select count(*) as y0_ from ... where ... order by ...
что может привести к ошибке. Это можно легко исправить, обернув оригинальный SQL и добавив select count(*)
:
select count(*) from (select * from ... where ... order by ...);
Как этого достичь или что бы вы еще предложили?
Вот пример неверного sql:
select count(*) as y0_
from UZI.Ereignis this_
left outer join UZI.Zaehlerzustand zaehlerzus1_ on this_.zustandHz_id=zaehlerzus1_.id
left outer join UZI.Mandant mandantali3_ on zaehlerzus1_.mandant_id=mandantali3_.id
left outer join UZI.Zaehlerzustand zaehlerzus2_ on this_.zustandNz_id=zaehlerzus2_.id
left outer join UZI.Mandant mandantali4_ on zaehlerzus2_.mandant_id=mandantali4_.id
where (zaehlerzus1_.zaehlernummer like ? or zaehlerzus2_.zaehlernummer like ?)
and (mandantali3_.id=? or mandantali4_.id=?)
order by this_.id desc