Критерии API. Предикат с выражением OrderBy - PullRequest
0 голосов
/ 09 марта 2020

У меня есть репозиторий с собственной реализацией Specification с методом toPredicate в качестве конструкции основного запроса, и я пытаюсь добавить выражение order by:

public Predicate toPredicate(@NotNull Root<Strategy> root,
                             @NotNull CriteriaQuery<?> query,
                             @NotNull CriteriaBuilder builder) {
     Predicate predicate = builder.conjunction();
     List<Expression<Boolean>> exps = predicate.getExpressions();

     ... adding different expressions to exps.add(...)

     // I get an id for descending sort due to Postgres just increment it.
     Order orderBy = builder.desc(root.get("id"));
     Expression<?> expression = orderBy.getExpression();

     // Problem here.
     exps.add(expression);
     return predicate;
}

Выражение из orderBy.getExpression() равно <?> generi c, но в списке оригинальных выражений ожидается тип <Boolean>. Как их соединить?

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Specification предназначен только для кодирования операторов where. Если вы хотите упорядочить результат, используйте экземпляр Sort в качестве дополнительного параметра .

0 голосов
/ 09 марта 2020

Сортировка с разбивкой на страницы означает, что сортировка должна быть в поле Pageable, например:

Pageable pagination = PageRequest.of(pageNumber, pageSize, Sort.by("id").descending());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...