hibernate select查询的结果列表确实被强制转换为相应的bean类

时间:2012-05-29 08:47:10

标签: java mysql hibernate

以下查询是由hibernate

生成的
Select sum(B.c_rejected_count) as y0_,B.c_date as y1_,B.c_node_site_id as y2_, 
A.c_sccp_addr as y3_ from tb_sccp_addr A inner join tb_dm_sccp_rej_day B on 
A.c_sccp_addr_id=B.c_sccp_addr_fk  group by A.c_date, A.c_node_site_id,       
B.c_sccp_addr, B.c_sccp_addr_id ;

我的Beanclass有以下数据:

private Date date;
private long rejectedCount;
private int nodeSiteId;
private String sccpAddress;

当我将选择查询的结果列表转换为我的bean类时,我得到一个强制转换异常

java.lang.ClassCastException

请确定出现问题以及如何解决问题

我正在使用Java反射

//函数初始化选择查询

private void initializeSelectQuery()
    {
        log(Level.DEBUG, "Entering initializeSelectQuery");
        Class classname = beanclass.getMappedClass();
        crit = hibernateSession.createCriteria(classname);

               if(group.getAggregate().equals("SUM"))
        {
                       projectionList.add(Projections.sum(beanDefinition
               .getPropertyForColumn(group.getColumnName())));
             }
               else
               {
                     projectionList.add(Projections.groupProperty(beanDefinition
              .getPropertyForColumn(group.getColumnName())));
               }
                  crit.setProjection(projectionList);
        crit.setMaxResults(10); 
       }


public List executeSelectQuery() {
    log(Level.DEBUG, "Entering executeSelectQuery");

    List datalist = null;

    try {
        tx = hibernateSession.beginTransaction();
        if (crit != null) {
            datalist = crit.list();
        }
        tx.commit();

    } catch (MappingException e) {
        e.printStackTrace();
        System.out.println(e.getMessage());
    } catch (HibernateException e) {
        e.printStackTrace();
    }

    log(Level.DEBUG, "Exiting executeSelectQuery");
    return datalist;

}

1 个答案:

答案 0 :(得分:1)

您的查询似乎没有使用任何结果转换器(例如AliasToBeanResultTransformer)。因此,由于它使用投影列表,因此查询返回List<Object[]>。 Hibernate无法知道它必须返回bean类的实例。要么将List<Object[]>转换为您想要的显式,要么使用ResultTransformer。