JPAQuery.fetchResults() 已弃用,我应该如何替换它?
JPAQuery.fetchResults() is deprecated, how should I replace it?
我使用querydsl-core 5.0.0;当我获取分页数据时,我发现 JPAQuery.fetchResults() 已被弃用。现在需要用什么方法来实现分页数据呢
enter image description here
如果您查看 API 文档,它建议使用 fetch()
方法。
文档:
背后的士气是 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()
,因此您的旧代码可以继续正常工作。
我使用querydsl-core 5.0.0;当我获取分页数据时,我发现 JPAQuery.fetchResults() 已被弃用。现在需要用什么方法来实现分页数据呢
enter image description here
如果您查看 API 文档,它建议使用 fetch()
方法。
文档:
背后的士气是 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()
,因此您的旧代码可以继续正常工作。