-1

次のクエリは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;

結果のselectクエリのリストをBeanclassにキャストすると、キャスト例外が発生します

java.lang.ClassCastException

何が問題になっているのか、どのように解決するのかを特定してください

Javaリフレクションを使用しています

//関数はselectクエリを初期化します

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;

}
4

1 に答える 1

1

クエリに結果トランスフォーマー(などAliasToBeanResultTransformer)を使用していないようです。したがって、プロジェクションリストを使用するため、クエリはを返しますList<Object[]>。HibernateがBeanクラスのインスタンスを返さなければならないことを知る方法はありません。を明示的に必要なものに変換するList<Object[]>か、ResultTransformerを使用します。

于 2012-05-29T09:15:02.507 に答える