我希望能够计算另一个查询中返回的记录数量。使用SQL很容易:
select count (*)
from (
select count(first_name)
from users
group by first_name) as temp
有没有人知道我怎么能用HQL做到这一点?
答案 0 :(得分:0)
select count(*) from
(
select AUTO_ID_CUSTOMER, sum(UNIT_QTY*UNIT_PRICE)
from V_TRANSACTIONS
where INV_DATE > '01/01/2006'
group by AUTO_ID_CUSTOMER
having sum(UNIT_QTY*UNIT_PRICE) < 100000
)
答案 1 :(得分:0)
我认为以通用方式不可能。 HQL确实 - 据我所知 - 不支持from子句中的子查询。 (当然,试一试。有时隐藏的功能......)
在这种情况下,查询将是:
select count(distinct first_name)
from users
似乎无法计算多个不同的列。
有feature for QueryOver
(我不知道它是否存在以及如何在Java中调用它。)
如果您迫切需要它用于HQL,您可以编写这样的方法并将其发送给社区......
答案 2 :(得分:0)
我希望它会帮助别人。这是一个有效的HQL / SQL查询:
SELECT COUNT(*) FROM users AS u WHERE u.id IN
(SELECT u2.id FROM users AS u2 GROUP BY u2.first_name);
选择分组行的ID,然后计算此列表中包含id的行。
UPD :此查询的效果非常低。
答案 3 :(得分:0)
除非我的问题出错,否则如果目的只是查找查询返回的记录数,则可以尝试以下版本:
session.createQuery("select count(first_name) from Users
group by first_name)").list().size();
请注意,上述查询中的用户是实体名称而不是表名。
如果您正在寻找与您的SQL查询类似的HQL查询语法(即from子句中的subselect),Hibernate HQL不支持HHH-3356