《Hibernate 原生SQL》

@Override
 public List<FmsCountEfficiency> getReportForms(final String sql) {
  SQLQuery query = (SQLQuery) this.getSession().createSQLQuery(sql);
  query.setResultTransformer(Transformers.aliasToBean(FmsCountEfficiency.class));
  query.addScalar("feName",Hibernate.STRING);
  query.addScalar("feCenterName",Hibernate.STRING);
  query.addScalar("feDeptName",Hibernate.STRING);
  query.addScalar("feDisitNum",Hibernate.INTEGER);
  query.addScalar("feFaultNum",Hibernate.INTEGER);
  query.addScalar("feOnTime",Hibernate.INTEGER);
  query.addScalar("feOverTime",Hibernate.INTEGER);
  query.addScalar("feBreakDown",Hibernate.INTEGER);
  query.addScalar("feNoReply",Hibernate.INTEGER);
  query.addScalar("feAvgNum",Hibernate.DOUBLE);
  List list=query.list();
  return list;
 }
String sql="SELECT  FF_RESPONSIBLE_PERSON_NAME as feName,"+
    " (SELECT sd.SD_PARENT_DEPT_NAME FROM SYS_DEPT sd WHERE SD.SD_DEPT_NAME=FF_RESPONSIBLE_PERSON_Deptname) as feCenterName,FF_RESPONSIBLE_PERSON_Deptname as feDeptName,"+
    "(SELECT count(FV.FV_ID) FROM FMS_VISIT fv WHERE FV.FV_VISITOR_NAME= FF_RESPONSIBLE_PERSON_NAME AND FV.FV_STATE='20') as feDisitNum,"+
    "count(FF_ID) as feFaultNum,"+
    "(SELECT count(FF.FF_ID) FROM FMS_FAULT ff WHERE FF.FF_RESPONSIBLE_PERSON_NAME=FF_RESPONSIBLE_PERSON_NAME AND FF.FF_STATUS='550' AND FF.FF_STATUS not in('110','210','310','610')) as feOnTime, (SELECT count(FF.FF_ID) FROM FMS_FAULT ff WHERE FF.FF_RESPONSIBLE_PERSON_NAME=FF_RESPONSIBLE_PERSON_NAME AND FF.FF_STATUS='550' AND FF.FF_STATUS  in('110','210','310','610')) as feOverTime,"+
    "(SELECT count(FF.FF_ID) FROM FMS_FAULT ff WHERE FF.FF_STATUS='240') as feBreakDown,"+
    "(SELECT count(FF.FF_ID) FROM FMS_FAULT ff WHERE (to_number(to_date(to_char(FF.FF_FINISH_TIME,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') - to_Date(to_char(FF.SYS_CREATE_DATE,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24)>4) as feNoReply ,"+
    "(SELECT sum(to_number(to_date(to_char(FF.FF_FINISH_TIME,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') - to_Date(to_char(FF.SYS_CREATE_DATE,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24)/count(FF.FF_ID) FROM fms_fault ff WHERE FF.FF_STATUS='550') as feAvgNum "+
    "from FMS_FAULT  GROUP BY FF_RESPONSIBLE_PERSON_NAME,FF_RESPONSIBLE_PERSON_Deptname";

其中FmsCountEfficiency是我们需要填充的实体类,不需要与数据库映射。 query.addScalar("feName",Hibernate.STRING);中feName是FmsCountEfficiency的一个属性,也必须跟我们从数据库中查出的字段名一致,这样三点一线就可以填充我们的实体类。提高我们的工作效率。

你可能感兴趣的:(sql,Hibernate,原生)