之前做了个项目,其中涉及到hql语句中使用聚合函数,真那个纠结啊!现将我的一些总结分享一下(仅限个人所理解,有不对之处,尽请谅解。)
首先,要使用聚合函数,得到的就不是int类型数据,所以在定义pojo类属性时得注意了。
private double change_count;
private double wlan_count;
private double data_count;
private double send_count;
private double electricy_count;
private double platform_count;
private double totle_count;
当然也可以用Long类型。
这是第一点,第二点需要注意的是hql语句了,如:
String hql="select new cn.com.starit.local.persistence.po.NetWorkFaultType(sum(t.change_count),sum(t.wlan_count)," +
"sum(t.data_count),sum(t.send_count),sum(t.electricy_count),sum(t.platform_count),sum(t.totle_count)) from NetWorkFaultType t" +
" where timeid between '"+20131201+"' and '"+20131231+"'";
其中new出来的对象里必须要有这些值的构造函数(同时需要一个空构造)。
public NetWorkFaultType(double change_count,double wlan_count,double data_count,double send_count,double electricy_count,double platform_count,double totle_count)
{
this.change_count=change_count;
this.wlan_count=wlan_count;
this.data_count=data_count;
this.send_count=send_count;
this.electricy_count=electricy_count;
this.platform_count=platform_count;
this.totle_count=totle_count;
}
public NetWorkFaultType(){}
好了,注意到这两点,基本上就已经可以查询了。
之前在CSDN论坛发了个帖子,里面有不用聚合函数求值的方法,我是想到当初我遇到这个问题的时候在网上找资料的痛苦过程,在此分享一下。
帖子的地址如下:http://bbs.csdn.net/topics/390679437
希望能给遇到这类问题的童鞋带来一些必要的帮助。