У меня есть класс Lawsuit
, содержащий List<Hearing>
, каждый из которых имеет атрибут Date
.
Мне нужно выбрать все Lawsuit
, упорядоченные по дате их Hearing
s
У меня есть CriteriaQuery, например
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Lawsuit> cq = cb.createQuery(Lawsuit.class);
Root<Lawsuit> root = cq.from(Lawsuit.class);
Я использую отличный, чтобы сгладить результаты:
cq.select(root).distinct(true);
Затем я присоединяюсь к Lawsuit
с помощью Hearing
Join<Lawsuit, Hearing> hearing = root.join("hearings", JoinType.INNER);
создать Predicate
predicateList.add(cb.isNotNull(hearing.<Date>get("date")));
и Order
s:
orderList.add(cb.asc(hearing.<Date>get("date")));
Все работает отлично, если я избегаю distinct
, но если я его использую, он жалуется на невозможность заказа на основе полей, которые не находятся в SELECT:
Вызывает: org.postgresql.util.PSQLException: ОШИБКА: для
SELECT DISTINCT
выраженияORDER BY
должны отображаться в списке выбора
List<Hearing>
уже доступен через возвращаемые классы Lawsuit
, поэтому я запутался: как добавить их в список выбора?