日期:2014-05-17  浏览次数:20684 次

Hibernate 子查询问题
本帖最后由 wj481199 于 2013-12-24 13:37:09 编辑
现有需求一张表按某个字段分组查询, 而且要分页, 要得的分组后的记录总数来计算页数.
SQL可以这样写:

SELECT
SUM(a)
FROM
( SELECT
CASE
WHEN count(income_agent_id) IS NOT NULL THEN
1
ELSE
0
END AS a
FROM
deduct
WHERE
type <> 4
GROUP BY
income_agent_id,
MONTH (deduct_date)
) tmp;

而在hibernate中这样写报错了,不支持:

select sum(t.a) from (select d.income.id as a from Deduct d group by d.income.id) tmp t;


求大神们支招,有什么方法能实现像上面SQL的功能,不想直接SQL语句的方式(createSQLQuery),也不想用query.list().size()这样,小弟菜鸟,谢谢指教,分不多,有解决方案立马结贴.

------解决方案--------------------
利用session打开数据库,然后建立自己定义一个find(id);方法,用一个Set<T>接收查询到的数据,这样所有数据都在里面了
------解决方案--------------------
1.从你的意思看看记录总数是count()函数,不是sum函数
2.不论你按照什么分类,总记录数肯定是一样的啊,都是你所有的记录,单纯要记录数没必要这么麻烦的直接
   select count(d) from Deduct d就行了
3.如果从分页效果上来看的话,hql是不支持直接复核查询的,要在hbm配置文件中另外配置的,不过很麻烦,用的很少,可以建议
先select d.income.id as a from Deduct d order by d.income.id,如果是给出某个组别的名称就直接where加条件好了,然后用hibernate自带的分页语句,setFirstResult和setMaxResults来设定
,不知道能不能帮上你
------解决方案--------------------
select sum(t.a) from (select d.income.id as a from Deduct d group by d.income.id) t;
tmp去掉