Код: Выделить всё
Specification.where(predicate1).and(predicate2).and(predicate3);
Код: Выделить всё
query.distinct(true);
Код: Выделить всё
query.orderBy(builder.desc(bJoin.get("orderbyColumn")));
Итак, в основном у нас есть объект A, основной объект и некоторый вложенный объект B, мы выбираем из A, но хотим упорядочить по B, а в сгенерированном sql он выбирает только столбцы из A. Единственный способ, который я нашел, чтобы заставить его работать (= заставить его выбирать из B как ну) это заменить соединение выборкой:
Код: Выделить всё
Fetch < A, B > bFetch = root.fetch("joinCol", JoinType.INNER);
Join < A, B > bJoin = (Join < A, B > ) bFetch;
org.hibernate.QueryException: запрос указал выборку соединения, но
владелец выбранной ассоциации не присутствовал в списке выбора
Я каким-то образом решил эту проблему в своем локальном указателе на H2, потребовав, чтобы некоторые столбцы не были нулевыми, но на реальном сервере, использующем PostgreSQL, это вообще не работает, получая эту ошибку во всех случаях, когда присутствует выборка.
Мой вопрос: как правильно использовать distinct вместе с orderby во вложенных объект, который не извлекается? Подходит ли мое решение с fetch, и его просто нужно исправить (и если да, то как?) или мне следует полностью выбрать другой вариант?
Для реального запроса я использую этот метод:
Код: Выделить всё
findAll(Specification, Pageable)
Код: Выделить всё
select distinct colA1, colA2, coAl3 from (select colA1, colA2, coAl3
from A inner join B b on ........ order by b.colB1)
Будем очень признательны за любые советы.>
Подробнее здесь: https://stackoverflow.com/questions/624 ... mn-in-join
Мобильная версия