Как сгенерировать запрос количества с критериями 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

0 ответов

Другие вопросы по тегам