我有一个JPA规范,需要一分为二,但也支持后端分页。我不确定如何实现这一点。
例如,我的雇员可以是教师和护理人员两种类型。我需要对两者执行过滤搜索(精确搜索)并返回单个联合响应,该响应可以支持分页。虽然我知道如何执行这两个请求,但我不知道结合JPA规范时如何处理分页。有什么提示吗?
class EmployeeEntity {
private Long id;
private EmployeeType type;
private String name;
}
您是否尝试过 JpaRepository 或 ListPagingAndSortingRepository 或 PagingAndSortingRepository 因为它们允许分页并且创建像
findAllByType(...)
这样的方法可能会解决您的问题。
对于组合结果,您可以使用 HQL 类型查询编写单个查询或向数据库创建 2 个查询,并将它们放入单个列表/集合中,然后再作为结果返回。
您可以使用 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 进行分页
几个月前我写了一篇关于这个主题的小教程。在那里您还可以找到一些示例以及 Github 存储库。
希望您觉得它有用! https://binarymindset.com/filter-your-data-the-right-way-using-jpa-specifications/