https://blog.csdn.net/tyyytcj/article/details/78152524php
在利用spring data jpa開發的時候爲了解決一些複雜的查詢需求這時候咱們須要引入本地查詢nativeQuery
參照官方的例子spring
Native queries
The @Query annotation allows to execute native queries by setting the nativeQuery flag to true.sql
Example 50. Declare a native query at the query method using @Query數據庫
public interface UserRepository extends JpaRepository<User, Long> { @Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?1", nativeQuery = true) User findByEmailAddress(String emailAddress); }
這是官方給出的使用本地查詢的例子,可是也特別說明了目前本地查詢並不支持動態排序,可是能夠利用本地查詢進行分頁
Note, that we currently don’t support execution of dynamic sorting for native queries as we’d have to manipulate the actual query declared and we cannot do this reliably for native SQL. You can however use native queries for pagination by specifying the count query yourself:
這是官方給出的本地查詢的分頁形式
注意:若是你用這種方式在進行分頁查詢時是會報錯的(測試數據庫爲Oracle,其餘數據庫暫未作測試)
Example 51. Declare native count queries for pagination at the query method using @Querydom
public interface UserRepository extends JpaRepository<User, Long> { @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1", countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1", nativeQuery = true) Page<User> findByLastname(String lastname, Pageable pageable); }
個人代碼以下測試
@Query(value = "select * from secondleveldesc sd left join secondlevel s on s.code=sd.code ", countQuery = "select count(*) from secondleveldesc", nativeQuery = true) Page<SecondleveldescEntity> findAll(Pageable pageable);
此時的錯誤信息以下this
Caused by: org.springframework.data.jpa.repository.query.InvalidJpaQueryMethodException: Cannot use native queries with dynamic sorting and/or pagination in method public abstract org.springframework.data.domain.Page com.material.cltx.dao.SecondlevelDescDao.findAll(org.springframework.data.domain.Pageable)spa
經過各類搜索最終找到一種解決辦法.net
@Query(value = "select * from secondleveldesc sd left join secondlevel s on s.code=sd.code ORDER BY ?#{#pageable}",countQuery = "select count(*) from secondleveldesc",nativeQuery = true) Page<SecondleveldescEntity> findAll(Pageable pageable);
在查詢語句後面加上code
ORDER BY ?#{#pageable}」
這樣就能順利的利用本地查詢進行分頁了