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)