在另一个计数(*)

时间:2016-02-21 12:26:40

标签: java sql hibernate hql

首先,对不起,如果已经问过这个问题,但在搜索时我找不到任何东西。

我是Hibernate的新手,我不确定是否可以这样做,但我正在尝试将以下查询从SQL转换为Hibernate:

Select count(*) from (
  Select count(*) 
  from table
  where field1 in (...)
  Group by field1, field2);

现在,我知道我可以得到第二个查询的List并检查它的大小,但是我想用uniqueResult()方法做这个,因为它更有效。

关于如何做到这一点的任何想法? 提前谢谢!

编辑1:对不起,我忘了提到我试图用HQL做这件事。

2 个答案:

答案 0 :(得分:1)

from子句中的Hibernate does not support子查询。您可以通过重写查询来计算field1field2的不同连接(如@sagi在评论中已经建议的那样),或者如果您发现连接成本太高,则可以解决此问题:

select count(*) from table
where id in
  (select max(id) from table
   where field1 in (...)
   group by field1, field2);

答案 1 :(得分:0)

如果你能这样做会很好:

Select count(distinct field1, field2) 
from table
where field1 in (...)

但我认为这不适用于Hibernate。一个解决方法是将值(如Sagi在评论中提到的)与sepator连接起来:

Select count(distinct field1 || ':' || field2) 
from table
where field1 in (...);

一个注意事项:此版本将以与原始查询不同的方式处理NULL值。这很容易处理,但它使逻辑稍微复杂一些。