【问题标题】:Hibernate Criteria query - Class cast exceptionHibernate Criteria 查询 - 类转换异常
【发布时间】:2010-12-04 07:31:51
【问题描述】:

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

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

谢谢, 拉贾。

【问题讨论】:

  • 你指定了 ResultTransformer 吗?

标签: hibernate criteria


【解决方案1】:

我不确定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();

【讨论】:

    【解决方案2】:

    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() ;
    

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

    【讨论】:

    • 老问题,但这条线是金线:.setResultTransformer(Transformers.aliasToBean(Summary.class))
    • 收到此错误:无法实例化结果类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    相关资源
    最近更新 更多