[我正在使用具有pageable的Criteria API来返回具有pageable的Page<MyClass>
,但是当我插入setFirstResult
和setMaxResults
时,查询总是返回10个元素。
如果我从TypedQuery中删除setFirstResult
和setMaxResults
,则我的typedQuery.getResultList()
返回所有元素,但显然没有分页。
我有一项服务可以调用我的条件,以发送我的主要功能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个元素都在没有分页的单个页面中
我正在使用具有pageable的Criteria API返回具有pageable的Page
尝试以下配置。