JPA Pageable 似乎在访问列表中的多个结果后获取所有行

Posted

技术标签:

【中文标题】JPA Pageable 似乎在访问列表中的多个结果后获取所有行【英文标题】:JPA Pageable seems to fetch all rows after accessing more than one of the results in the list 【发布时间】:2021-02-18 06:42:12 【问题描述】:

我正在尝试使用 Pageable 和 org.springframework.data.domain.Page 来获取实体列表。我们只希望一次检索一页。

当我尝试访问返回的列表时出现问题。当它在事务中时,当您访问第二个实体(是的,不是第一个)时,它似乎试图获取所有内容。

如果我在事务之外访问列表,它不会这样做。但是由于我们是延迟加载属性,当我们尝试访问延迟加载的属性时会抛出错误,因为它在事务之外。

如何实现只获取我们请求的特定页面并能够访问延迟加载的属性?

提前感谢您的帮助。

【问题讨论】:

您能否详细说明“似乎试图获取所有内容”?是否将新实体添加到超出单个页面的结果中?您观察到的“获取所有内容”的症状是什么? 它超出了单个页面。看起来这是因为我们正在使用实体图。 好吧,如果你要获取多关联,Spring Data 不能在查询级别限制查询结果,它必须计算内存中的页面。那是因为,当你加入多值关联时,单个 JPQL 结果对应的 sql 结果行数变成可变的 【参考方案1】:

这似乎是使用实体图的休眠问题:https://github.com/Cosium/spring-data-jpa-entity-graph/issues/29

【讨论】:

以上是关于JPA Pageable 似乎在访问列表中的多个结果后获取所有行的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot - Jpa Distinct 和 Pageable

springboot+jpa分页插件(Pageable+Page)

Spring Data JPA之删除和修改

如何记录Spring Boot JPA Pageable绑定值?

JPA Pageable 无法分页问题

如何通过 Sort 和 Pageable 使用 Spring data JPA 开箱即用地查询数据?