Spring Data @Query с Pageable и сортировкой без сортировки - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь указать метод репозитория, помеченный @Query и Pageable с объектом Sort внутри:

Редактировать 1: этот репозиторий расширяется PagingAndSortingRepository.

@Query("...")
Page<Entity> findBySomething(..., Pageable pageable);

Объект pageable указывается с использованием следующей сигнатуры метода:

public PageRequest(int page, int size, Direction direction, String... properties)

Но выходной запрос генерируется без параметров сортировки, например:

select a, b, c from table_x where ... limit 10

... пока я ожидал что-то вроде:

select a, b, c from table_x where ... order by a asc limit 10

Кто-нибудь здесь сталкивался с такой проблемой? Я использую Spring-Boot 1.5.x.

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Как выглядит ваш запрос?

К сожалению, в Google есть страница с высоким индексом, когда вы ищете "пружинная сортировка страниц", которая указывает на это:
https://docs.spring.io/spring-data/rest/docs/2.0.0.M1/reference/html/paging-chapter.html

Вышесказанное больше не является правильным способом сортировки. Вместо этого вы должны следовать этому https://docs.spring.io/spring-data/rest/docs/current/reference/html/

Старый способ сортировки заключался в добавлении дополнительного параметра с тем же именем с постфиксом «.dir» в asc или desc.

Новый способ - & sort =, где направление задается дополнительной запятой к имени свойства.

Вы также можете посмотреть значение "sort" возвращаемого результата, чтобы увидеть, была ли когда-либо предпринята попытка сортировки, прежде чем проверять генерацию внутреннего запроса. т.е.

{ "содержание": [], "последние": правда, "totalElements": 0, "TOTALPAGES": 0, "сортировать": [{ "направление": "DESC", "собственность": "createdDate" , "IgnoreCase" ложь "nullHandling": "нативный", "восходящие" ложь "нисходящей": истинно}], "размер": 1000, "номер": 0, "первый": правда, "numberOfElements" : 0})

Надеюсь, это поможет.

0 голосов
/ 03 сентября 2018

Вы можете сделать это, как я.

Попробуйте, это может вам немного помочь.

1) В контроллере

@RequestMapping("/findUserByNameAndSortItDescNo/{name}")
        public @ResponseBody Page<User> findBookByNameAndSortItAscByName(@PathVariable String name)
        {
            // Page = 'A page is a sublist of a list of objects. It allows gain information about the position of it in the containing entire list.'
            Page<User> user = userRepository.findByName(name,new PageRequest(0,100,new Sort(Direction.DESC,"no")));
            return user;
        }

2) В репозитории.

Page<User> findByName(String name,Pageable pageable);
...