【问题标题】:JPAQuery.fetchResults() is deprecated, how should I replace it? [closed]JPAQuery.fetchResults() 已弃用,我应该如何替换它? [关闭]
【发布时间】:2021-11-03 12:10:30
【问题描述】:

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

enter image description here

【问题讨论】:

  • 请不要发布代码或错误的图像。见How to Ask
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: java spring-data-jpa querydsl


【解决方案1】:

【讨论】:

    【解决方案2】:

    背后的士气是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(),因此您的旧代码可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多