Spring JPA-выпуск при сортировке по столбцу non entity


Spring JPA-выпуск при сортировке по столбцу non entity

14.10.2019 10:09:06 Просмотров 66 Источник

У меня есть требование, где мне нужно получить записи, основанные на соединении трех таблиц с разбиением на страницы (требование добавления также есть). Поэтому я написал туземную книгу, чтобы получить записи. Ниже приведен пример запроса

@Query(value = "SELECT "
        + "a.GROUP_REF_ID as refId "
        + "count(case when c.STAT_CD in :userStatus then (c.grp_user_id) end) as numberOfUsers, "
        + "count(case when b.STAT_CD in :itemStatus then (b.grp_item_id) end) as numberOfItems  "
        + "from grp a left join grp_item b on a.grp_id=b.grp_id left join grp_user c on a.grp_id=c.grp_id "
        + "where a.stat_cd in :status and a.co_id in :cids "
        + "group by a.GROUP_REF_ID,a.grp_nam,a.GRP_DESC,a.co_id,a.co_nam,a.CRTE_BY, "
        + "a.CRTE_DT,a.UPDT_BY,a.UPDT_DT ", countQuery = "select count(*) from grp where stat_cd in :status and co_id in :cids ", nativeQuery = true)
public Page<Object> findByStatusAndCompanyIdIn(@Param("status") String status, @Param("cids") List<Long> companyIds,
        @Param("userStatus") List<GroupUserStatus> userStatus,
        @Param("itemStatus") List<GroupItemStatus> itemStatus, Pageable pageable);

Теперь требуется также, чтобы эти записи были отсортированы по любому столбцу в выбранной части. Таким образом, если пользователь передает numberOfItems, то записи должны быть отсортированы по нему. Но здесь я сталкиваюсь с проблемой, потому что если я передаю параметр Sort как numberOfItems, spring добавляет a. перед numberOfItems, что приводит к ошибке, что not able to find a.numberOfItems.

Есть ли способ остановить spring от добавления псевдонима таблицы при создании запроса с Sort, или я должен написать свою логику в другом подходе

У вопроса есть решение - Посмотреть?

Ответы - Spring JPA-выпуск при сортировке по столбцу non entity / Spring JPA - Issue while sorting on non entity column

Является ответом!
Jens Schauder

14.10.2019 01:17:45

Делая мой комментарий ответом, чтобы вопрос можно было пометить как ответ:

Оберните всю выборку в другую: select * from (<your current select>) x

Bombe

22.03.2020 12:47:03

Я решил эту проблему, создав проекцию. (Котлин был использован, но вы поймете суть.)

class ShowRepository : JpaRepository<Int, Show> {
    @Query("SELECT s AS show, (CASE WHEN (s.status = 'scheduled') THEN s.scheduledStartTime ELSE s.startTime END) AS time FROM Show s")
    fun findShows(pageable: Pageable): Page<ShowWithTime>
}

interface ShowWithTime {
    val show: Show,
    val time: Date?
}

Это позволяет Spring-Data работать в полную силу, и использование Sort.by(Order.desc("time")) работает как заклинание.

Я написал его здесь немного более подробно: сортировка по полю, не являющемуся сущностью .

Помочь в развитии проекта:
Закрыть X