Как добавить динамический SQL-запрос в JPA-аннотацию запроса при весенней загрузке? - PullRequest
0 голосов
/ 05 февраля 2019

Я хочу добавить сортировочный столбец в запрос во время выполнения.Я использовал аннотацию запроса для построения запроса.Я использовал параметр "sortCol" для добавления столбца сортировки в запросе.Но каким-то образом аннотация запроса не распознает парму sortCol и, следовательно, не использует ее.Также не выдает никакой ошибки.

 SELECT
        * 
    FROM
        request r 
    WHERE
        r.asset_type IN (
            ?, ?, ?
        ) 
        AND r.request_type IN (
            ?, ?
        ) 
        AND r.status IN  (
            ?, ?, ?, ?
        ) 
        AND r.assign_to = ?  
        AND (
            r.request_custom_id LIKE ? 
            OR r.project_name LIKE ? 
            OR r.asset_type LIKE ? 
            OR r.request_type LIKE ? 
        ) 
    ORDER BY
        ? limit ?"

При этом после упорядочения по имени столбца отсутствует, который я добавил.Во время выполнения:

    @Query(value ="SELECT * FROM request r WHERE r.asset_type IN (:assetType) AND r.request_type IN (:requestType) AND r.status IN  (:statusList) AND r.assign_to = :assignTo  AND ( r.request_custom_id LIKE %:searchTerm% OR r.project_name LIKE %:searchTerm1% OR r.asset_type LIKE %:searchTerm2% OR r.request_type LIKE %:searchTerm3% ) ORDER BY :sort",nativeQuery = true)
    Page<Request> findRequestdata(Pageable pageable,
            @Param("assetType") List<String> assetType,
            @Param("requestType") List<String> requestType,
            @Param("statusList") List<Integer> statusList,
            @Param("assignTo") Long assignTo,
            @Param("searchTerm") String searchTerm,
            @Param("searchTerm1") String searchTerm1,
            @Param("searchTerm2") String searchTerm2,
            @Param("searchTerm3") String searchTerm3,
            @Param("sort") String sortCol);

Все параметры установлены правильно, кроме «sortCol».Пожалуйста, подскажите, где мне чего-то не хватает.

1 Ответ

0 голосов
/ 05 февраля 2019

Вы уже передаете объект Pageable вашему методу.

Поэтому при создании подкачки вы также можете добавить сортировку:

Pageable sortedByName = PageRequest.of(0, 3, Sort.by("name"));

findRequestdata(sortedByName, ...)

Подробнее здесь: https://www.baeldung.com/spring-data-jpa-pagination-sorting

...