我正在使用 spring data 的 Pageable 来限制记录获取。我在数据库中有超过 500 个条目,但我只想获取 5 个,但它没有正确返回。大多数情况下它返回 2,3 或 4 条记录(每次它返回少于 5 条记录,但我数据库中有 500 条记录)。所以请帮助下面给出的服务类和存储库的 me.code
服务代码:
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);
}
最佳答案
此处的问题是由您为关联指定的 JOIN Fetch 选项造成的。
如果您考虑此语句从数据库返回的结果集,那么它可能包含每个用户的多条记录,例如例如,如果客户 x 有 5 个办事处,则结果集中的所有 5 条记录都来自客户 x。 JPA 层中的后处理会将其过滤为 1 条记录,因此您在应用程序中只会看到 1 条记录。
删除 JOIN 获取子句以验证情况是否如此。如果是这样,您将需要考虑为您的查询指定自定义 countQuery(这本质上会镜像您的主查询,但只是返回计数):
关于java - Spring Data PageRequest 未返回指定计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29820855/