簡體   English   中英

如何在Spring Data中使用Pageable運行運行時生成的查詢?

[英]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);

請注意, offsetlimit特定於MySQL和Postgres。 其他數據庫產品可能有不同的語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM