Я использую 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), в этом случае мы ничего не получаем за эту группу.
Надеюсь, вы могли бы мне помочь. Заранее спасибо!