比如有一个表存储的是工人的基本信息Worker,包括id,name,sex,Gongzhi其中Gongzhi是Set里面包含该员工本年的每月工资记录现在要求该员工本年的工资合计,HQL怎么写

解决方案 »

  1.   

    select sum(gongzhi) from worker 
      

  2.   

    select w.id, sum(g.month_gongzhi) from Worker w join w.Gongzhi g group by w.id
      

  3.   

    首先,你这个表的设计不符合3NF,工人->月工资是1->N关系。
    其次,就算你要这样,没有年月这个字段,怎么统计?
    最后,如果有年月这个字段(6位char格式YYYYMM):
    select gongzi from tbl where id =*** and substr(ym,1,4)='2009';,获取所有当年月工资记录。
    select sum(gongzi) from tbl where id=*** and substr(ym,1,4)='2009';,获取当年总工资。
      

  4.   

    select
    w.*,(select sum(金额一列) from Gongzi g where g.workerid=w.id and g.year<'2009-12-31' and g.year>'2009-01-01') as gongzi
    from Worker w
      

  5.   

    或者看看#2楼的能不能行,如果实在不能在SQL中做,就把计算工作放在Worker类中做,写一个统计方法:public class Worker{
        private Integer id;
        private String name;
        private Sex sex;
        private Set<Gongzhi> gongzis;    private BigDecimal gzCount;    private BigDecimal getGzCount(){
            if(gongzis != null){
                double count = 0d;
                for(Gongzi gz : gongzis){
                    count+=gz.getMoney();
                }
                return new BigDecimal(String.value(count));//注意这里要四舍五入
            }
            return new BigDecimal("0.00");
        }
    }Hibernate查询仍按常规查询(例如条件按月份),上层类中调用getGzCount()即是工资合计;jsp中${gzCount}就可。