Spring Data分页查询多个结果

时间:2018-09-26 20:01:43

标签: java hibernate spring-boot pagination spring-data-jpa

我们正在将Spring Boot 2与Spring Data及其PagingAndSortingRepository功能一起使用。这对于单个查询效果很好,但是在一种情况下,我们必须进行三个不同的查询并为组合结果实现分页。

最好的方法是什么?

这是我尝试过的:

1)编写一个UNION或JOIN查询,这些查询已将合并结果作为Page或Slice返回。但是,此查询花费的时间几乎是拍摄三个单独的查询并使用Java进行聚合的十倍。我们在这里谈论复杂的计算(PostGIS后端)。

2)使用现有的SliceImpl或PageImpl类手动构造页面/切片。这对于初始请求而言效果很好,但是在第二个请求中却失败,当用户说类似以下内容时:给我第1页(页面大小== 10个项目)。第一页(第0页)可能包含来自第一个查询的4个项目和来自第二个查询的12个项目中的6个。询问第1页,那么我得到的第一个查询结果为0,第二个查询结果为2(而不是6),而第三个查询则填充了其余结果。很显然,从逻辑的角度来看这是行不通的。

还有其他想法吗?

编辑:我们计划添加Hibernate Search和Caching,可以通过使选项1)足够快地从外部解决此问题。我的问题是要寻求“内部”解决方案,即e。我今天可以写一些代码,直到我们有了外部解决方案为止。

1 个答案:

答案 0 :(得分:0)

如第2点所述,除非始终在查询之间保持左联接,否则没有人可以保证您在第一个查询部分中检索到的内容足以生成10个有效元素的页面。

在页面完成之前实施查找元素的逻辑,这肯定比单个查询昂贵……尤其是当您必须越来越多地增加页面时。

我认为您必须将所有查询合并到一个查询中。

在这种情况下,一种解决方案是在数据库上创建实例化视图并应用更简单的过滤器。

拥有一个缓存框架也可以提供帮助。