Как выполнить сортировку по нескольким полям в пользовательском запросе JPQL с помощью Spring Pageable

#spring #hibernate #spring-data-jpa #spring-data #jpa-2.0

#spring #переход в спящий режим #spring-data-jpa #spring-данные #jpa-2.0

Вопрос:

Я использую Spring’s Pageable для сортировки столбцов.

Рабочий пример приведен ниже:

   Pageable pageable = PageRequest.of(0, countOfBookData.intValue(), getSortingDirection(sortingOrder), sortingField);
  

Где sortingOrder = ASC и sortingField = BookName

Вот запрос

  @Query("SELECT bs FROM BookSummary bs WHERE bs.bookId=:bookId")
List<Books> getBookDetails(@Param("bookId") Integer bookId, Pageable pageable)
  

Но я застрял, когда мне нужно выполнить эту сортировку в пользовательском запросе.
Итак, я понятия не имею, как я могу выполнить сортировку, используя Pageable для приведенного ниже пользовательского запроса:

 Public List<Tuple> getBookDetails(Integer bookId){
String query = "SELECT book.bookCd as bookCode, "
                  "book.name as bookName"
                  "FROM Book book WHERE book.bookId=:bookId";
        return entityManager.createQuery(query , Tuple.class).setParameter("bookId", bookId).getResultList();
}   
  

Ответ №1:

То же, что и в первом пользовательском запросе, но с использованием проекции, например:

 public interface BookDetails {
    String getBookCode();
    String getBookName();
}
  
 @Query("select b.bookCd as bookCode, b.name as bookName from Book b where b.bookId = ?1")
List<BookDetails> getBookDetails(Integer bookId, Pageable pageable);
  

Обратите внимание, что имена методов проекции должны совпадать с соответствующими псевдонимами в запросе.

Или без запроса:

 List<BookDetails> getAllById(Integer bookId, Pageable pageable);
  

Комментарии:

1. Допустим, у меня есть ограничение на использование только пользовательского запроса. Что именно я ищу, так это сделать то же самое с пользовательским запросом, а не с @Query.

2. @DeskToDevelop у вас есть ограничение на использование @Query аннотаций или на использование методов запроса Spring Data JPA вообще? (смотрите Обновленный ответ)