最近做一个数据的统计,页面上是用的table,每个列头需要排序,这个功能对于单表来说并不复杂,直接把td的id设置成要排序的字段,然后通过字符串凭借,传到后台(接下来会写一篇关于table排序的文章),后台接收后,按照常规来讲,一般拼接hql或是DetachedCriteria就可以了,但现在问题是数据是需要分组后的,而且排序的话,对那些聚合函数算出来的数据排序才是有意义的,问题来了,hibernate分组聚合后的字段,不让自定义别名(我是没试出来,不知哪位高手点拨一二),现在的话我一般用map来接收
如:
[color=red]注:LinkedHashMap是按插入顺序排序的[/color]
这样的话在orderby的时候直接statusHql(key)就ok了,既拼接了查询的内容,又拼接了orderby语句。
这样做没根本解决上面说的那个问题,因为加入在groupby之后再来用聚合函数排序的话,结果会变,所以自定义别名的问题还需另外找方案,这里只是点出了问题所在,总不能用hibernate自己生成的col_0_0_,col_1_0_,col_2_0_这些玩意吧!
如:
LinkedHashMap<String ,String> statusHql=
new LinkedHashMap<String, String>();
statusHql.put("fitName", "fitName");
statusHql.put("insideChange","insideChange");
statusHql.put("outsideChange","outsideChange");
statusHql.put("total","total");
statusHql.put("totalRate","totalRate");
statusHql.put("insideChangeRate","insideChangeRate");
statusHql.put("outsideChangeRate","outsideChangeRate");
/*
前面存入的是在页面上定义的td的Id,后面是字段或者表达式如sum(case when) 等 */
[color=red]注:LinkedHashMap是按插入顺序排序的[/color]
这样的话在orderby的时候直接statusHql(key)就ok了,既拼接了查询的内容,又拼接了orderby语句。
这样做没根本解决上面说的那个问题,因为加入在groupby之后再来用聚合函数排序的话,结果会变,所以自定义别名的问题还需另外找方案,这里只是点出了问题所在,总不能用hibernate自己生成的col_0_0_,col_1_0_,col_2_0_这些玩意吧!