如何使用Spring Pageable对自定义查询JPQL上的多个字段执行排序

问题描述 投票:0回答:1

我使用Spring的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();
}   
spring hibernate spring-data-jpa spring-data jpa-2.0
1个回答
0
投票

与第一个自定义查询相同,但使用Projection,例如:

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);
© www.soinside.com 2019 - 2024. All rights reserved.