Я использую 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 элементов на одной странице без пагинации