3

我正在使用 Hibernate(3.2) 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(摘要)

你能帮我解决这个问题吗?我是冬眠的新手。

谢谢,拉贾。

4

2 回答 2

3

Summary要在结果中返回映射实体还是 bean?不应该两者兼而有之。您需要将实体类传递到session.createCriteria().

就结果而言,您需要:

  1. 在您的 Summary 类中有一个适当的设置器(或者您的结果 bean,如果它不同的话)。
  2. 为您的投影指定别名。
  3. 指定一个“aliasToBean”结果转换器。

您的标准代码将变为:

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

在这个例子中,你的Summarybean 需要有一个方法。setContractSum()

于 2009-10-06T17:44:53.427 回答
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();
于 2010-03-11T03:45:24.220 回答