Запрос Критерии гибернации - исключение приведения класса - PullRequest
3 голосов
/ 06 октября 2009

Я использую Критерии Hibernate (3.2) для запросов и дает мне исключение при преобразовании в список.

Пожалуйста, смотрите мой код и исключение ниже:

    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 (Резюме)

Не могли бы вы помочь мне с этим. Я новичок в спящем режиме.

Спасибо, Радж.

Ответы [ 2 ]

3 голосов
/ 06 октября 2009

Является ли Summary отображенной сущностью или бином, который вы пытаетесь вернуть в своих результатах? Это не должно быть и то и другое. Вам нужно передать класс сущности в session.createCriteria().

Что касается результатов, вам необходимо:

  1. У вас должен быть соответствующий установщик в вашем классе Summary (или в вашем компоненте результата, если он другой).
  2. Укажите псевдоним для вашей проекции.
  3. Укажите преобразователь результата 'aliasToBean'.

Ваш код критерия станет:

summaryList = Criteria.setProjection(
 Projections.projectionList()
  .add(Projections.sum("contractDollar"), "contractSum")
  .add(Projections.groupProperty("department"))
 )
.setResultTransformer(Transformers.aliasToBean(Summary.class))
.list() ;

Ваш боб Summary должен иметь метод setContractSum() в этом примере.

2 голосов
/ 11 марта 2010

Я не уверен, что такое 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...