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.typec.dateおよびの3 つのプロパティを選択しています。sum(c.amount)これは、各結果が、選択された 3 つのプロパティのそれぞれを含む 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];

しかし、何のために合計が必要なのかわかりませんが、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 に答える