Как добавить нумерацию страниц на Criteria api, используя typedQuery? - PullRequest
0 голосов
/ 10 мая 2019

Я использую Criteria API с pageable, чтобы вернуть страницу с pageable, но когда я вставляю 'setfirstresult' и setmaxresults, запрос всегда возвращает 10 элементов.

Если я удаляю setFirstResult и setMaxResults из TypedQuery, мой typedQuery.getResulList () возвращает все элементы, но, очевидно, без разбиения на страницы.

У меня есть служба, которая вызывает мои критерии для отправки моей страницы для главной функции"peopleRepository.filter"

public Page<People> filtrarParcial(String name,String rg, String mom, String cpf, String nickname, Integer pageNumber, Integer pageSize, List<String> sort) {

        List<Sort.Order> orders = new ArrayList<>();


        PageRequest pageRequest = PageRequest.of(pageNumber,pageSize,Sort.by(orders));

        Page<People>  listPeople = peopleRepository.filter(name, rg, mom, cpf, nickname, pageRequest);

        return listPeople;
    }

Мой репозиторий реализует

@Service
public class PeopleRepositoryImpl implements PeopleRepositoryQueries {
    @PersistenceContext
    private EntityManager manager;


    @Transactional(readOnly = true)
    public Page<People> filter(String name, String rg, String mom, String cpf, String nickname, Pageable pageable) {


        CriteriaBuilder criteriaBuilder = manager.getCriteriaBuilder();
        CriteriaQuery<People> query = criteriaBuilder.createQuery(People.class);


        Root<People> root = query.from(People.class);

        Path<String> nomePath = root.<String>get("name");

        List<Predicate> predicates = new ArrayList<Predicate>();


        if(!nome.equals("")) {
            Predicate nomeIgual = criteriaBuilder.like(nomePath, "%" +name.toUpperCase() + "%");
            predicates.add(nomeIgual);
        }

        query.where((Predicate[]) predicates.toArray(new Predicate[0]));

        int paginaAtual = pageable.getPageNumber();
        int totalRegistrosPorPagina = pageable.getPageSize();
        int primeiroRegistro = paginaAtual * totalRegistrosPorPagina;

        TypedQuery<People> typedQuery = manager.createQuery(query);

//      typedQuery.setFirstResult(primeiroRegistro);
//      typedQuery.setMaxResults(totalRegistrosPorPagina);

        Integer totalRows = typedQuery.getResultList().size();


        Long total = totalRows.longValue();
        return new PageImpl<>(typedQuery.getResultList(), pageable, total);
    }

Если я ищу, например, людей с именем marcos, typedQuery.getResultList () возвращает только 10 элементов по совпадению с тем жеколичество элементов на странице (в моей базе их 180).Если я уберу это

typedQuery.setFirstResult(primeiroRegistro);
typedQuery.setMaxResults(totalRegistrosPorPagina);

, то мой typedQuery.getResultList () вернет 180 элементов, но с разбивкой на страницы, все 180 элементов на одной странице без пагинации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...