首先,对不起,如果已经问过这个问题,但在搜索时我找不到任何东西。
我是Hibernate的新手,我不确定是否可以这样做,但我正在尝试将以下查询从SQL转换为Hibernate:
Select count(*) from (
Select count(*)
from table
where field1 in (...)
Group by field1, field2);
现在,我知道我可以得到第二个查询的List并检查它的大小,但是我想用uniqueResult()方法做这个,因为它更有效。
关于如何做到这一点的任何想法? 提前谢谢!
编辑1:对不起,我忘了提到我试图用HQL做这件事。
答案 0 :(得分:1)
from
子句中的Hibernate does not support子查询。您可以通过重写查询来计算field1
和field2
的不同连接(如@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
值。这很容易处理,但它使逻辑稍微复杂一些。