Hibernate Criteria查询 - 类强制转换异常

时间:2009-10-06 15:04:04

标签: hibernate criteria

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

你可以帮我解决这个问题。我是一个休眠的新手。

谢谢, 拉加。

2 个答案:

答案 0 :(得分:3)

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

就结果而言,你需要:

  1. 在Summary类中使用适当的setter(如果不同,则使用结果bean)。
  2. 指定投影的别名。
  3. 指定'aliasToBean'结果转换器。
  4. 您的标准代码将变为:

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

    在此示例中,您的Summary bean需要setContractSum()方法。

答案 1 :(得分: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();
相关问题