[英]How can I run a runtime generated query with Pageable in Spring Data?
我有一個運行時生成的JPQL作為一個字符串和一個PageAble對象。 我想使用Pageable運行JPQL查詢。 我怎樣才能做到這一點?
例如:我想要這樣的解決方案,其中包含運行時生成的查詢字符串。
@Query("select u from User u")
Page<User> findUsers(Pageable pageable);
嘗試1
要使用運行時生成的查詢,必須將存儲庫方法聲明為
@Query("?1") Page<User>
findUsers(String query, Pageable pageable)
但是, @Query
是在初始化應用程序上下文時解析的,因此該方法將失敗,因為?1
本身不是有效的JPQL表達式。
嘗試2
如果您使用
@Query("?1", nativeQuery = true)
上下文將初始化,您將能夠將生成的查詢傳遞給方法,但是Pageable
參數將被忽略,因為按原樣使用作為方法參數傳遞的查詢。
因此,總之,不,您要查找的內容無法通過Pageable
完成。
嘗試3
如果必須在運行時生成查詢,則還必須自己執行分頁。 使用MySQL作為基礎數據庫的示例查詢:
@Query("select u from user u order by last_name, first_name offset (?1 - 1) * ?2 limit ?2", nativeQuery = true)
Page<User> findUsers(int page, int pageSize);
請注意, offset
和limit
特定於MySQL和Postgres。 其他數據庫產品可能有不同的語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.