将JPA规范与分页相结合

问题描述 投票:0回答:3

我有一个JPA规范,需要一分为二,但也支持后端分页。我不确定如何实现这一点。

例如,我的雇员可以是教师和护理人员两种类型。我需要对两者执行过滤搜索(精确搜索)并返回单个联合响应,该响应可以支持分页。虽然我知道如何执行这两个请求,但我不知道结合JPA规范时如何处理分页。有什么提示吗?

class EmployeeEntity {
  private Long id;
  private EmployeeType type;
  private String name;

} 
java spring-boot jpa spring-data-jpa spring-data
3个回答
0
投票

您是否尝试过 JpaRepositoryListPagingAndSortingRepositoryPagingAndSortingRepository 因为它们允许分页并且创建像

findAllByType(...)
这样的方法可能会解决您的问题。 对于组合结果,您可以使用 HQL 类型查询编写单个查询或向数据库创建 2 个查询,并将它们放入单个列表/集合中,然后再作为结果返回。


0
投票

您可以使用 Criteria API 处理多种规格的分页。 示例:

DetachedCriteria detachedCriteria = DetachedCriteria.forClass(EmployeeEntity.class, "employee");

现在假设您想按 EmployeeType 过滤 Employee,这是一些不同的实体:

detachedCriteria.createAlias("employee.type", "employeeType");
detachedCriteria.add(Restrictions.eq("employeeType.name", string (example: "Teachers")));

类似的方式你可以添加更多规范,对于分页,你可以这样做:

Integer pageNumber = (Integer.valueOf(page_number)-1) * 10;

然后您可以使用以下方法传递所有这些数据:

resultList = findByCriteria(detachedCriteria,pageNumber,page_size);

它将根据规范返回结果,并根据 page_number 和 page_size 进行分页


0
投票

几个月前我写了一篇关于这个主题的小教程。在那里您还可以找到一些示例以及 Github 存储库。

希望您觉得它有用! https://binarymindset.com/filter-your-data-the-right-way-using-jpa-specifications/

© www.soinside.com 2019 - 2024. All rights reserved.