【问题标题】:Pagination with JPQL and BooleanExpression使用 JPQL 和 BooleanExpression 进行分页
【发布时间】:2020-06-12 10:51:57
【问题描述】:

我是分页新手,我想为我的 JPQL 查询分页,但我做不到,请查找以下课程:

服务:

public List<Company> getCompanies(BooleanExpression predicate, Pageable pageRequest){
    return companyRepositoryImpl.getCompany(predicate, pageRequest);
}

存储库: @Repository 公共类 CompanyRepositoryImpl{

@PersistenceContext
private EntityManager entityManager;

public <T> List<T> getCompany(BooleanExpression finalExpression, Pageable pageRequest) {

    int pageNumber = pageRequest.getPageNumber();
    int pageSize = pageRequest.getPageSize();
    long pageOffset = pageRequest.getOffset();
    Sort sortValue = pageRequest.getSort();
//  String str = sortValue.toString();



    QCompany comp = QCompany.company;
    QCompanyAddress qCompanyAddress = QCompanyAddress.companyAddress;
    final JPQLQuery<QCompany> jpqlQuery = new JPAQuery(entityManager);
    OrderSpecifier<?> o = qCompanyAddress.addressLine1.desc();
    JPQLQuery<QCompany> query = jpqlQuery.from(comp).leftJoin(qCompanyAddress)
                                                    .on(comp.id.eq(qCompanyAddress.company.id)
                                                    .and(qCompanyAddress.statusActiveSwitch.eq(SwitchEnum.Y))
                                                    .and(qCompanyAddress.addressType.addressTypeCode.eq("1")))
                                                    .where(finalExpression).orderBy(o).limit(20);

    QueryResults<QCompany> fetchResults = query.fetchResults();
    List<QCompany> results = fetchResults.getResults();
    fetchResults.getTotal();
    return (List<T>) results;

}

在存储库中,我有可分页对象,但我不知道如何将它与 JPQL 一起使用。感谢您的帮助。

【问题讨论】:

    标签: java rest pagination jpql querydsl


    【解决方案1】:

    要根据定义的pageable 对象加载数据,您必须从您的query 定义中删除limit(20)。然后,您可以执行以下操作:

    List<Company> companies = getQuerydsl()
                .applyPagination(pageable, query)
                .fetch();
    

    你可以返回列表。

    如果你想返回页面而不是列表,那么你必须改变一下 -

    long total = query.fetchCount();
    List<Company> companies = getQuerydsl()
                .applyPagination(pageable, query)
                .fetch();
    return new PageImpl<>(companies, pageable, total);
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 1970-01-01
      • 2018-12-21
      • 2016-02-09
      • 2014-12-26
      • 2017-08-04
      • 2021-03-01
      • 2011-07-18
      • 2012-03-27
      相关资源
      最近更新 更多