2015-04-23 28 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

相关问题