Hibernate Criteria — максимальное значение из заданного списка

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

Пример:

select t.field1, max(t.field2) as total
from table t
where t.field2 in :givenList 
group by t.field1
order by total desc;

Я пытался сделать это:

Criteria criteria = session.createCriteria(Table.class);
DetachedCriteria maxNo = DetachedCriteria.forClass(Table.class);
ProjectionList projection = Projections.projectionList();
projection.add(Projections.groupProperty("id.field1"));
projection.add(Projections.max("id.field2"));
maxNo.setProjection(projection);
criteria.add(Subqueries.propertiesIn(new String[] {"id.field1", "id.field2"}, maxNo));

Этот код отлично работает, но возвращает только максимальное значение для каждой группы.

Если я попытаюсь добавить другие ограничения, например:

criteria.add(Property.forName("id.field2").in(givenList));

Запрос работает некорректно. Базовый случай, максимум для группы равен 2, а заданный список равен (0,1), в этом случае мы ничего не получаем за эту группу.

Надеюсь, вы могли бы мне помочь. Заранее спасибо!


person gcotis    schedule 27.05.2015    source источник
comment
Пожалуйста, предоставьте образцы данных и ожидаемый результат, который поможет вам лучше получить правильный и быстрый ответ :)   -  person Vishal Zanzrukia    schedule 27.05.2015


Ответы (1)


Я нашел решение.

maxNo.add(Restrictions.in("id.field2", givenList));

На самом деле, я ошибаюсь, размещая Ограничения в Критериях. Мы должны поместить ограничения в DetachedCriteria.

Все равно спасибо

person gcotis    schedule 27.05.2015