Массив предиката и выражение where выглядят правильно определенными. В этих строках:
Предикат-предикат = attributeBuilder.like (root.get ("name"),
"% [MyValue]%");
queryConditions.add (предикат);
queryBase.where(queryConditions.toArray(new Predicate[]{}));
TypedQuery<Person> query = em.createQuery(queryBase);
Просто напоминание. Может быть, вам нужно criteriaBuilder.equal
вместо criteriaBuilder.like
. Если вы уверены, что сделали, вы можете пропустить это напоминание.
Вам необходимо изменить следующие строки, например:
query.setFirstResult(Math.toIntExact(pageRequest.getOffset()));
query.setMaxResults(pageRequest.getPageSize());
return new PageImpl<Person>(query.getResultList(), pageRequest, getTotalCount(criteriaBuilder, queryConditions));
Затем добавьте getTotalCount
метод для согласованности.
private Long getTotalCount(CriteriaBuilder criteriaBuilder, Predicate[] predicateArray) {
CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class);
Root<T> root = criteriaQuery.from(entityType);
criteriaQuery.select(criteriaBuilder.count(root));
criteriaQuery.where(predicateArray);
return entityManager.createQuery(criteriaQuery).getSingleResult();
}