Hibernate无法使用聚合函数强制转换为Java

Hibernate无法使用聚合函数强制转换为Java,java,spring,hibernate,Java,Spring,Hibernate,我正在使用Hibernate(也是新的),并尝试使用聚合函数从MS SQL数据库中检索计数值和其他字段。我为数据创建了一个POJO类,如下所示: package com.hdl.model.db; import java.util.Date; @Entity @Table(name = "sfdc_stg_lab_orders") @SqlResultSetMappings( { SqlResultSetMapping(name = "ProfessorAndManager", colu

我正在使用Hibernate(也是新的),并尝试使用聚合函数从MS SQL数据库中检索计数值和其他字段。我为数据创建了一个POJO类,如下所示:

package com.hdl.model.db;

import java.util.Date;


@Entity
@Table(name = "sfdc_stg_lab_orders")
@SqlResultSetMappings( {
SqlResultSetMapping(name = "ProfessorAndManager", 
columns = { @ColumnResult(name = "total"),
            @ColumnResult(name = "org_name"),
            @ColumnResult(name = "drawMonth"),
            @ColumnResult(name = "drawYear")
   })
})


public class OrgnameByMonthYear {

    public OrgnameByMonthYear(Id sfdc_stg_lab_order_key, String org_name,int drawMonth,    
  int drawYear , Double total){

        this.org_name = org_name;
        this.total = total;
        this.drawMonth = drawMonth;
        this.drawYear = drawYear;       
    }


    @Id
    @GeneratedValue
    @Column(name= "sfdc_stg_lab_order_key")
    /*
     * Unique ID - System Generated
     */
    private Integer sfdc_stg_lab_order_key; 

    /*
     * Name of the Organization
     */
    @Column(name= "org_name")
    private String org_name;

    @Column(name = "total")
    private double total;

    @Column(name = "drawMonth")
    private int drawMonth;

    @Column(name = "drawYear")
    private int drawYear;   


    public Integer getSfdc_stg_lab_order_key() {
        return sfdc_stg_lab_order_key;
    }

    public void setSfdc_stg_lab_order_key(Integer sfdc_stg_lab_order_key) {
        this.sfdc_stg_lab_order_key = sfdc_stg_lab_order_key;
    }   


    /**
     * @return the orgname
     */ 
    public String getOrg_name() {
        return org_name;
    }

        /**
     * @param orgname to set
     */
    public void setOrg_name(String org_name) {
         this.org_name = org_name;
    }   

    /**
     * @return the year
     */ 
    public double getTotal() {
        return total;
    }

    /**
     * @param total to set
     */
    public void setTotal(long total) {
        this.total = total;
    }   

    /**
     * @return the month
     */ 
    public int getDrawMonth() {
        return drawMonth;
    } 

    /**
     * @param month to set
     */
    public void setDrawMonth(int drawMonth) {
        this.drawMonth = drawMonth;
    }   

    /**
     * @return the year
     */ 
    public int getDrawYear() {
        return drawYear;
    }

    /**
     * @param year to set
     */
    public void setDrawYear(int drawYear) {
        this.drawYear = drawYear;
    }   


    @Override
    public String toString() {
        return "sfdc_stg_lab_orders [sfdc_stg_lab_order_key=" +    
  sfdc_stg_lab_order_key + "total=" + total + ", org_name=" + org_name + "]";
    }   
}
我调用以下命令以使用Hibernate find检索数据:

@SuppressWarnings("unchecked")
@Override   
public List<OrgnameByMonthYear> getOrgnameByMonthYear() {
    logger.info("Retrieving getOrgnameByMonthYear list inside SfdcStgLabOrdersDAOImpl ....");

        return hibernateTemplate.find("select count(org_name) AS total, org_name,  
month(specimen_draw_date_1) AS drawMonth, year(specimen_draw_date_1) AS drawYear from 
OrgnameByMonthYear group by org_name, month(specimen_draw_date_1), 
   year(specimen_draw_date_1)");
  }

这可以通过创建包含查询结果的新类AggregationResults来完成:

public class AggregationResults {

    private Integer total;
    private String orgName;
    private Integer drawMonth;
    private Integer drawYear;

    ... constructor with all properties here ...
}
然后使用
new
运算符重写查询,使其返回
AggregationResults

@SuppressWarnings("unchecked")
@Override   
public List<AggregationResults> getOrgnameByMonthYear() {
    logger.info("Retrieving AggregationResults list inside SfdcStgLabOrdersDAOImpl ....");

        return hibernateTemplate.find("select new com.your.package.AggregationResults( count(org_name) AS total, org_name,  
month(specimen_draw_date_1) AS drawMonth, year(specimen_draw_date_1) AS drawYear) from 
OrgnameByMonthYear group by org_name, month(specimen_draw_date_1), 
   year(specimen_draw_date_1)");
  }
@SuppressWarnings(“未选中”)
@凌驾
公共列表getOrgnameByMonthYear(){
info(“在SfdcStgLabOrdersDAOImpl中检索聚合结果列表…”);
返回hibernateTemplate.find(“选择new com.your.package.AggregationResults(count(org\u name))作为总计,org\u name,
月(样本提取日期)为提取月,年(样本提取日期)为提取年)
OrgnameByMonthYear组按组织名称、月份(样本绘制日期1),
年份(样本(图)日期(1));;
}
@SuppressWarnings("unchecked")
@Override   
public List<AggregationResults> getOrgnameByMonthYear() {
    logger.info("Retrieving AggregationResults list inside SfdcStgLabOrdersDAOImpl ....");

        return hibernateTemplate.find("select new com.your.package.AggregationResults( count(org_name) AS total, org_name,  
month(specimen_draw_date_1) AS drawMonth, year(specimen_draw_date_1) AS drawYear) from 
OrgnameByMonthYear group by org_name, month(specimen_draw_date_1), 
   year(specimen_draw_date_1)");
  }