JPAQuery.fetchResults() 已弃用,我应该如何替换它?

JPAQuery.fetchResults() is deprecated, how should I replace it?

我使用querydsl-core 5.0.0;当我获取分页数据时,我发现 JPAQuery.fetchResults() 已被弃用。现在需要用什么方法来实现分页数据呢

enter image description here

如果您查看 API 文档,它建议使用 fetch() 方法。

文档:

Mind that for any scenario where the count is not strictly needed separately, we recommend to use {@link #fetch()} instead.

背后的士气是 fetchResults 首先(在某些情况下)从未正常工作,并且无法仅使用语法 JPQL(查询语言JPA) 允许。

如果 fetchResults 之前对您有效,您可以继续使用它。但只有当您确实需要总数时才这样做。因为 fetchResults 是一个误导性名称,用户通常只需要 fetch(),这显然是首选,因为它没有 fetchResults 所具有的缺陷。

虽然 fetchResults 将在相当长的时间内保持可用(尽管 JPA 不鼓励使用它),但您很可能会遇到 fetchResults 不起作用的情况。如果您确实需要适当的分页,这也适用于聚合查询,我建议使用 Querydsl integration for Blaze-Persistence,它具有高级分页功能:

public PagedList<Employee> Employees(int firstResult, int maxResults) {
    return new BlazeJPAQuery(entityManager, criteriaBuilderFactory).from(employee)
        .orderBy(employee.id.asc())
        .select(employee)
        .fetchPage(firstResult, maxResults);
}

使用此高级分页,它还可以正确实现 fetchResults(),因此您的旧代码可以继续正常工作。