如何使用条件api生成计数查询

时间:2012-12-27 14:57:07

标签: hibernate hibernate-criteria

我想计算使用条件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,表示“具有条款的列或表达式”   无效“)。以下示例......

如果原始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 个答案:

没有答案