3

クエリに 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(Summary) として指定したにもかかわらず、結果が 'Object' として返される理由がわかりません。

これで私を助けてくれませんか。冬眠初心者です。

ありがとう、ラジャ。

4

2 に答える 2

3

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

この例では、 BeanにメソッドSummaryが必要です。setContractSum()

于 2009-10-06T17:44:53.427 に答える
2

私は何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();
于 2010-03-11T03:45:24.220 に答える