Нумерация страниц с помощью JPQL и BooleanExpression - PullRequest
1 голос
/ 28 февраля 2020

Я новичок в разбиении на страницы, я хочу разбить на страницы свой JPQL-запрос, но я не могу этого сделать, найдите следующие классы:

Служба:

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

Репозиторий: @Repository publi c class 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. любая помощь ценится.

1 Ответ

0 голосов
/ 04 марта 2020

Чтобы загрузить данные согласно определенному pageable объекту, вы должны удалить limit(20) из вашего query определения. Затем вы можете сделать следующие вещи:

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);

Надеюсь, это поможет вам.

...