JavaJPaQuery。fetchResults()已弃用,应如何替换它? 11 月,2 周 Questions & Answers 311 我使用querydsl core 5.0.0;当我得到分页数据时,我发现了JPAQuery。fetchResults()已被弃用。现在我需要使用什么方法来实现分页数据 enter image description here
# 1 楼答案 如果您查看API文档,它建议使用fetch()方法 文档: Mind that for any scenario where the count is not strictly needed separately, we recommend to use {@link #fetch()} instead.
# 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(),因此旧代码可以正常工作
# 1 楼答案
如果您查看API文档,它建议使用
fetch()
方法文档:
Mind that for any scenario where the count is not strictly needed separately, we recommend to use {@link #fetch()} instead.
# 2 楼答案
背后的士气是
fetchResults
从一开始就无法正常工作(在某些情况下),并且无法仅使用JPQL(JPA的查询语言)允许的语法来正确实现它如果
fetchResults
以前为您工作过,您可以继续使用它。但是,只有在实际需要总数时才这样做。因为fetchResults
是一个误导性的名称,用户通常只需要fetch()
,这显然是首选,因为它没有fetchResults
的缺陷虽然
fetchResults
将在相当长的时间内保持可用(尽管JPA不鼓励使用它),但您很可能最终会遇到fetchResults
不起作用的情况。如果您确实需要正确的分页(这也适用于聚合查询),我建议使用Querydsl integration for Blaze-Persistence,它具有高级分页功能:使用这种高级分页,它还可以正确地实现
fetchResults()
,因此旧代码可以正常工作