0

HQLを使用してデータベースからデータをフェッチする次のようなコードを作成しました。

Query qr=sess.createQuery("select i.contract_Vcode,i.installment_date from Installment i where i.vcode=:instalVcode").setParameter("instalVcode", installVcode);
        qr.getNamedParameters();
List<Installment> li=null;
        li=qr.list();
int coVcode=li.get(0).getContract_Vcode();

私が知っているように、contract_Vcodeは整数です。しかし、実行したい場合、次のエラーが発生します。

Error invoking Action using Hibernate Core Session / Transaction injection
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to information.Installment

このような正確な要素を見たいときは、さらに

System.out.println("contract installDate is: "+li.get(0).getContract_Vcode());

同じエラーが発生します。どうすればこれを修正できますか?

4

1 に答える 1

2

現在、分割払いの2つの部分のみをクエリしています。すべてを取得したい場合は、次のようなものを期待します。

Query qr = sess.createQuery(
                    "select from Installment as i where i.vcode=:instalVcode")
               .setParameter("instalVcode", installVcode);

(エンティティ全体ではなく)複数のプロパティをフェッチするObject[]と、結果の各行に対してが返されます。

したがって、元のクエリを使用できますが、次のようになります。

List<Object[]> li = qr.list();
int coVcode = (Integer) li.get(0)[0]; // 1st column of 1st row
于 2012-05-22T10:10:33.503 に答える