Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Report query и Hibernate


Автор: zzzvyk 27.9.2010, 15:42
Всем привет!
Есть задача- надо сделать отчет. 
Код

select new RowReport(b.name, b.foo)  from Bean b where b.foo IN (:params.fooList)


Как сделать так чтобы если params.regionList пустой лист или null то фильтрация по данному полю не проводится?

Я знаю что такие вещи решаются через Criteria, но поскольку это отчет то мы должны возвращать коллекцию бинов которые не имеют маппинга, а с критерией это вроде невозможно...




Автор: MisterCleric 28.9.2010, 10:16
Привет.
Можно это решить через критерию и как раз тем репортом как тебе хочется.
http://kickjava.com/src/org/hibernate/transform/AliasToBeanResultTransformer.java.htm

Автор: zzzvyk 28.9.2010, 16:56
Спасибо за ответ, вот только дело в том что RowReport в моем примере не имеет маппинга, и мне не понятно как получить собственно критерию. 
Возможно я не совсем удачно написал пример.
Код

select new RowReport( count(b), b.foo)  from Bean b where b.foo IN (:params.fooList)



Автор: MisterCleric 28.9.2010, 17:44
А что в JavaDoc указанного класса написано, что StudentDTO имеет меппинг?
А критерия должна быть примерно такой:
Код

List<RowReport> result = session.createCriteria(Bean.class)
                .setProjection(Projections.projectionList()
                .add(Projections.count("*"), "cnt")
                .add(Projections.property("foo"), "foo"))
                .add(Restrictions.in("foo", params.fooList))
                .setResultTransformer( new AliasToBeanResultTransformer(RowReport.class)).list();


Автор: zzzvyk 29.9.2010, 10:16
Спасибо!!!   МЕГА спасибо!!!! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)