java - Spring Data PageRequest 未返回指定计数

标签 java hibernate jpa spring-data

我正在使用 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(这本质上会镜像您的主查询,但只是返回计数):

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

关于java - Spring Data PageRequest 未返回指定计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29820855/

相关文章:

java - 在哪里可以找到 jpa 2.1 osgi 包

java - 托管实体上的 Bean 验证

java - JPA:从外部源更新数据的好方法是什么?

java - 使用 SpringData 的 WebSphere 上的 ORA-00907

mysql - 使用 JPA EntityManagerFactory(JSE、EclipseLink、Tomcat)连接到运行时在网络服务器中选择的不同 mysql 模式,这可能吗?

java - 将一段声音保存为铃声

java - Solr 中缺少强制 uniquekey 字段错误

Pane 中的 JavaFX Canvas 大小

java - 如何使用java在文本文件中搜索特定段落

java - 我可以将 Hibernate 与 JTA 一起使用吗?