Spring Data JDB C настроенный запрос с параметром заказа не работает - PullRequest
2 голосов
/ 06 августа 2020

Я пытаюсь упорядочить свой собственный запрос со специальным параметром, например:

@Query("select * from person where firstname = :name" + " order by :order")
List<Customer> findByFirstNameCustomQuery2(@Param("name") String name, Pageable page,
@Param("order") String order);

, но это не работает.

Кто-нибудь знает, как использовать «упорядочить по» в качестве параметра внутри @Query?

примечание: Как указано ниже, я создал репозиторий github. Вы можете найти его здесь: https://github.com/kremerkp/spring-data-jdbc-pageable-h2.

CustomerRepository имеет пять функций. findByLastName - это полнофункциональный пример (с возможностью сортировки и просмотра страниц), в котором используются функции запроса.

В моем реальном проекте у меня есть запрос, который слишком сложен для использования с функциями запроса, поэтому мне нужно получить результат по индивидуальному запросу.

1 Ответ

0 голосов
/ 06 августа 2020

Этот конкретный случай может быть решен без специального запроса, просто используя атрибут Sort из Pageable. Вы должны иметь возможность использовать Page в качестве возвращаемого типа метода, но из-за ошибки https://jira.spring.io/projects/DATAJDBC/issues/DATAJDBC-554 это в настоящее время (начиная с Spring Data JDB C 2.0.2.RELEASE) невозможно.

Однако вы можете создать метод, возвращающий List, и передать ему Pageable объект:

List<Customer> findByFirstName(String name, Pageable page);

Хотя метод возвращает List, разбивка на страницы и сортировка по-прежнему должны применяться, поэтому список содержит только данные с одной страницы, отсортированные по запросу:

repository.findByFirstName("Foo", 
  PageRequest.of(0, 1, Sort.by(Sort.Direction.ASC, "someSortField"));
...