2012-09-28 88 views
7

我們使用Spring Data和PageRequest並且打了一大堆數據。除了正在執行的查詢以獲取頁面總數外,所有查詢都以最佳方式執行。有沒有辦法禁用這個功能,或者我們很可能必須實現我們自己的Pageable?如何禁用PageRequest的計數查詢以獲取總頁數?

http://static.springsource.org/spring-data/data-commons/docs/1.3.2.RELEASE/api/org/springframework/data/domain/PageRequest.html

http://static.springsource.org/spring-data/data-commons/docs/1.3.2.RELEASE/api/org/springframework/data/domain/Pageable.html

編輯:進一步分析後我認爲解決這個問題的唯一方法是不使用Spring數據,並使用EntityManager的,因爲它允許開始行的記錄數的設置返回。我們只需要下一頁是否可用,所以我們只需檢索一個額外的記錄。我們還需要一個在Spring Data中看起來不可能的動態查詢。

編輯2:而且這似乎我只是沒有等待足夠長的一些迴應。多謝你們!!!

回答

17

實現此目的的方法只需使用List作爲返回值。因此,例如,像這樣定義的庫:

interface CustomerRepository extends Repository<Customer, Long> { 

    List<Customer> findByLastname(Stirng lastname, Pageable pageable); 
} 

查詢執行引擎將適用偏移量和PAGESIZE由Pageable的手,但不會觸發額外的計數查詢,因爲我們並不需要構建一個Page實例。這也記錄在參考文件的relevant sections中。

+0

你好奧利弗,是否有可能使用findAll()方法做同樣的事情?像列表 findAll(可分頁)? (這樣就可以生成如下所示的內容:SELECT * FROM TABLE ORDER BY xxx LIMIT yyy)?我沒有想到如何做到這一點(並在此線索中與拉爾夫展開了一場「火焰戰爭」):-) –

+0

如果我想將它們全部放在一個頁面中,該怎麼辦?也就是說,忽略分頁。我可以做一些新的PageRequest(0,0)嗎? – Stephane

+0

@StephaneEybert - 如果你想要所有的東西,只要從你的方法定義中去掉Pageable參數。當然,你需要小心這個和巨大的數據集。 – JBCP

相關問題