我想计算使用标准 api 构造的查询返回的结果。我不想重写任何这些查询。我试过了
(Integer)criteria.setProjection(Projections.rowCount()).uniqueResult();
这可能有效,但取决于 Hibernate 3.2.4 将生成的连接和限制
无效的 sql(DB2:com.ibm.db2.jcc.b.co:DB2 SQL 错误:SQLCODE=-119,SQLSTATE=42803,这意味着“在 HAVING CLAUSE 中的列或表达式无效”)。下面的例子...
如果原来的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