2015-04-23 69 views
1

我正在使用彈簧數據的Pageable來限制記錄抓取。我在數據庫中有超過500個條目,但是我想只抓取5個,但它不能正確返回。大部分它返回2,3或4條記錄(每次返回少於5條記錄但我在數據庫中有500條記錄)。我.CODE下面Spring Data PageRequest不返回指定的計數

服務代碼指定服務類和資源庫:

public List<Client> listAll() { 
     Pageable pageable = new PageRequest(0,5); 
     return (List<Client>) clientRepository.getAllClient(pageable); 
     } 

庫代碼:

public interface ClientRepository extends CrudRepository<Client, Long> { 

@Query("Select distinct p FROM Client p LEFT JOIN FETCH p.offices LEFT JOIN FETCH p.users LEFT JOIN FETCH p.firmSeats") 
public List<Client> getAllClient(Pageable page); 
} 
+0

[春數據可能重複抓取連接與尋呼是不工作](http://stackoverflow.com/questions/21549480/spring-data-fetch-join-with-paging-is-not-working) –

回答

1

這裏的問題是,你已經爲指定的連接抓取選項的結果這些協會。

如果您考慮由此語句從DB返回的結果集,那麼它可能包含每個用戶的多個記錄,例如例如,如果有5個辦公室,結果集中的所有5個記錄都來自客戶x。 JPA層中的後處理然後將其過濾爲1條記錄,因此您只能在應用程序中看到1條記錄。

刪除JOIN獲取子句以驗證是這種情況。如果是這樣,你需要看一下指定自定義countQuery爲您查詢(這基本上反映你的主要查詢,但只返回數):

http://codingexplained.com/coding/java/spring-framework/fetch-query-not-working-spring-data-jpa-pageable

相關問題