2009-10-06 94 views
3

我正在使用Hibernate(3.2)查询标准,并在转换为列表时给我例外。Hibernate Criteria查询 - 类抛出异常

请看看我的代码和异常如下:

List<Summary> summaryList; 
    Criteria criteria = session.createCriteria(Summary.class); 
    session.beginTransaction(); 
    summaryList = Criteria.setProjection(
     Projections.projectionList().add(Projections.sum("contractDollar")) 
     .add(Projections.groupProperty("department"))).list() ; 

例外: java.lang.ClassCastException:[Ljava.lang.Object;不能转换为com.abc.model.Summary

我不知道为什么结果返回为“对象”,即使我指定它作为我的POJO(摘要)

能否请你帮我这个。我是休眠的新手。

谢谢, 拉贾。

+0

您指定使用ResultTransformer? – 2009-10-06 15:08:07

回答

3

Summary映射的实体还是您试图在结果中返回的bean?它不应该是两个。你需要将一个实体类传入session.createCriteria()

至于结果走了,你需要:

  1. 在摘要类(或你的结果豆如果是不同的)具有相应的setter。
  2. 为您的投影指定一个别名。
  3. 指定一个'aliasToBean'结果转换器。

您的标准代码将变为:

summaryList = Criteria.setProjection(
Projections.projectionList() 
    .add(Projections.sum("contractDollar"), "contractSum") 
    .add(Projections.groupProperty("department")) 
) 
.setResultTransformer(Transformers.aliasToBean(Summary.class)) 
.list() ; 

Summary豆需要有在这个例子中setContractSum()方法。

+0

老问题,但这一行是黄金:'.setResultTransformer(Transformers.aliasToBean(Summary.class))' – cowls 2013-03-08 10:41:24

2

我不知道什么是Summary但尝试:

Criteria criteria = session.createCriteria(Summary.class); 
Transaction tx = session.beginTransaction(); 
summaryList = criteria.setProjection(
    Projections.projectionList().add(Projections.sum("contractDollar")) 
     .add(Projections.groupProperty("department"))).list() ; 

Object[] result = criteria.list().get(0); 
// result[0] holds the sum of contractDollar 

tx.commit();