0
"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)

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

4

2 回答 2

1

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

如果 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];

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

于 2013-05-01T23:01:34.177 回答
0

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

参考下图便于理解:

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

让我知道您的确切要求,以便我可以建议您合适的解决方案。

于 2013-05-02T06:41:35.107 回答