Java 如何使用spring数据获取分页和排序的组

Java 如何使用spring数据获取分页和排序的组,java,spring-boot,spring-data,grouping,paging,Java,Spring Boot,Spring Data,Grouping,Paging,我的后端必须以以下结构返回数据: data: [{ key: "Group 1", items: [ ... ], count: 3, },{ key: "Group 2", items: [ ... ], count: 9, } ...] 此数据必须可排序且可分页。以下代码正在

我的后端必须以以下结构返回数据:

     data: [{
        key: "Group 1",
        items: [ ... ],         
        count: 3,               
    },{
        key: "Group 2",
        items: [ ... ],         
        count: 9,               
    } ...]
此数据必须可排序且可分页。以下代码正在执行此操作:

public Page<Report> getReports(Integer skip, Integer take, String sortParams, String group) {

     Pageable pageable = createPageable(skip, take, sortParams); 
     Specifications<Report> filters = (Specifications<Report>) getFilters();

     return this.reportRepository.findAll(filters, pageable);

}

@Repository
public interface ReportRepository extends PagingAndSortingRepository<Report, String>, JpaSpecificationExecutor<Report> {

}
publicpagegetreports(整数跳过、整数接受、字符串排序图、字符串组){
Pageable Pageable=createPageable(跳过、获取、排序图);
规格过滤器=(规格)getFilters();
返回this.reportRepository.findAll(过滤器,可分页);
}
@存储库
公共接口ReportRepository扩展了分页和排序存储库,JpaSpecificationExecutor{
}

此外,我还想按report类的属性对结果进行分组。对于spring数据,是否还有其他方法可以做到这一点?我在他们的API中找不到任何东西。

问题是-如果group by可用,您能否通过直接查询数据库获得想要的结果

根据经验,如果您可以从DB中获得所需格式的结果,则始终可以使用本机查询在Spring数据中获得结果,并将结果存储在为其编写的POJO中

在下面的示例中,我假设您有一个新的对象只用于存储结果,名为result。由于您没有确切指定将在数据库中使用的查询结果的结构,因此我没有提供结果的类定义。我使用的查询只是基本的groupby,您应该将其替换为您自己的查询

在存储库界面中,使用group by创建本机查询:

@Repository
public interface ReportRepository extends PagingAndSortingRepository<Report, String>, JpaSpecificationExecutor<Report> {

    @Query(value="Select grp, count(grp) from report group by grp", nativeQuery=true)
    List<Result> findAggregatedResults();
}
@存储库
公共接口ReportRepository扩展了分页和排序存储库,JpaSpecificationExecutor{
@查询(value=“按grp从报告组中选择grp,计数(grp)”,nativeQuery=true)
列出findAggregatedResults();
}

请添加您的实体结构和确切的JSON结果。实体结构并不重要。我需要一个分组页面结果,并寻找一个通用的spring解决方案。谢谢你的答复。因此,我想要一个org.springframework.data.domain.Page对象。所以我需要一些类似的东西:PageFindAggregatedResults(规范过滤器、Pageable Pageable、List groupBy);若你们想分页,你们只需要一页一页地要求列表。看看这里是怎么做的:。我们的想法是从每个结果行应该具有的内容开始,并保留分页以获得常规列表中的下一个X行。没有提到如何按各种属性对结果进行分组。我在原始答案中提到了如何对结果进行分组。您可以为想要的答案编写POJO,用原生SQL编写GROUPBY查询,并将其附加到存储库中返回列表的方法。不管怎样,您都可以将此结果列表分页。