【发布时间】:2012-03-20 12:13:47
【问题描述】:
我希望能够计算在另一个查询中返回的记录数量。使用 SQL 很简单:
select count (*)
from (
select count(first_name)
from users
group by first_name) as temp
有谁知道如何使用 HQL 做到这一点?
【问题讨论】:
我希望能够计算在另一个查询中返回的记录数量。使用 SQL 很简单:
select count (*)
from (
select count(first_name)
from users
group by first_name) as temp
有谁知道如何使用 HQL 做到这一点?
【问题讨论】:
我认为这是不可能的通用方式。 HQL 确实——据我所知——不支持 from 子句中的子查询。 (可以肯定的是,试试吧。有时还有隐藏的功能……)
在这种情况下,查询将是:
select count(distinct first_name)
from users
似乎无法计算多个不同的列。
有一个feature for QueryOver(我不知道它是否存在以及在Java中如何调用它)。
如果你迫切需要HQL,你可以写一个这样的方法并发送到社区......
【讨论】:
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
)
【讨论】:
我希望它会对某人有所帮助。这是一个有效的 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:此查询的性能非常低。
【讨论】:
除非我把你的问题弄错了,如果只是为了查找查询返回的记录数,你可以试试下面的版本:
session.createQuery("select count(first_name) from Users
group by first_name)").list().size();
请注意,上述查询中的 Users 是实体名称而不是表名称。
如果您正在寻找与您的 SQL 查询类似的 HQL 查询语法(即,从子句中的子选择),则 Hibernate HQL 不支持 HHH-3356
【讨论】: