【问题标题】:Hibernate query - ClassCastError [duplicate]休眠查询 - ClassCastError [重复]
【发布时间】:2013-05-01 22:58:14
【问题描述】:
"select c.type, c.date, sum(c.amount) from CustomerPayment c  where c.date  like '%" + year + "' and c.type='Cash'"

由于我的 select 语句,上面的休眠查询给出了 ClassCastError。

我怎样才能以正确的方式编写它?是否需要使用求和标准? y 对上述查询有什么好处?我很困惑。

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to CustomerPayment
    at tekirmobile.clController.getTotalCash(clController.java:163)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)

由于上述查询,我​​收到这些错误

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    您正在选择三个属性:c.typec.datesum(c.amount),这意味着每个结果将是一个 Object[],包含三个选定属性中的每一个。您不能将此投射到 CustomerPayment。

    如果 CustomerPayment 有一个兼容的构造函数,你可以这样做

    select new CustomerPayment(c.type, c.date and sum(c.amount)) ...
    

    或者你可能会做类似的事情

    "select c, c.type, c.date, sum(c.amount) from CustomerPayment c ... "
    
    Object[] result = query.uniqueResult();
    CustomerPayment payment = (CustomerPayment) result[0];
    

    但是,我不确定您需要 sum 来做什么,因为您没有在 where 子句中的任何地方使用 sum。它有点不清楚你想要完成什么。例如,您希望 uniqueResult 的结果是什么? CustomerPayment 实例?还是值列表?

    【讨论】:

    • 但我必须选择所有这些以获得正确的结果
    • 请尝试在执行查询的位置添加代码,并通过 .list() 或 .uniqueResult() 访问结果:)
    • 我使用了 uniqueResult() 但它仍然会导致问题
    • 您的问题是您无法将 Object[] 转换为 CustomerPayment
    【解决方案2】:

    实际上它不会按照另一个答案返回Object[]。它将返回Object[][]。它的每个数组将由一个数组组成,该数组包含c.type, c.date & sum(c.amount) 的 3 个条目。

    参考下图便于理解:

    -----------------------------------
          |    0    |    1    |   2   |
    -----------------------------------
      0   | c.type1 | c.date1 |  sum  |
    -----------------------------------
      1   | c.type2 | c.date2 |  sum  |
    -----------------------------------
      2   | c.type3 | c.date3 |  sum  |
    -----------------------------------
    

    让我知道您的确切要求,以便我向您推荐合适的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      相关资源
      最近更新 更多