经过一些研究,我发现了很多关于如何编写简单高效的代码(使用JPQL)的资料,可以实现以下功能:
- 允许获取相关实体信息(例如使用JOIN FETCH)
- 允许对单个实体进行分页
但是,当需要将它们结合起来时,如何以高效且清晰的方式实现就变得不太清楚了。
要么是能够正常获取相关实体信息,但在内存中应用分页(也就是说,"HHH000104: firstResult/maxResults specified with collection fetch; applying in memory!")
要么是能够正常分页,但无法获取相关实体信息(即使
resultSet
实际上包含相关实体),导致每个批次中的每行都需要向数据库发出额外的查询以获取相关实体。
最接近实际工作的解决方案是https://vladmihalcea.com/fix-hibernate-hhh000104-entity-fetch-pagination-warning-message/
但这让我想知道是否有更直观、更简洁的解决方案?
问题:是否还有其他最佳实践可以在获取相关实体信息的情况下使用分页?
注意:解决方案还应提供一种从数据库中检索数据并应用筛选器的方法(例如JPQL WHERE clause)