Как я могу различить количество запросов по полю в спецификации JPA? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть класс спецификации, который реализует интерфейс спецификации JPA: EntityClassSpecification implements Specification<EntityClass>

У меня есть переопределенный toPredicate метод, который выглядит следующим образом:

public Predicate toPredicate(Root<EntityClass> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
    final Collection<Predicate> predicates = new ArrayList<>();
    if (isNullOrEmpty(soilEntryCriteria.getField())) {
        query.groupBy(root.get("field"));
    }
    return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}

Проблема в том, что когда я 'используя эту спецификацию для findAll (), которая возвращает Page<EntityClass> результирующий набор, сгруппированный по field, но когда я получаю общее количество для разбивки на страницы - он возвращает неверный счет без группировки по field.

Я попытался использовать .distinct(true), .countDistinct(root.get("field")) и создать отдельный запрос подсчета, который возвращает длинное значение, но каждый раз, когда запрос jpql для подсчета не изменяется и возвращает неверное общее значение.

Я думаю, его времяпросить помощи.Не могли бы вы предложить какие-либо советы, как я могу изменить этот запрос общего количества для нумерации страниц?

1 Ответ

0 голосов
/ 31 июля 2019

Я использую этот подход:

@Override
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) 
{

    // Count Query?
    if (query.getResultType().toString().contains("java.lang.Long")) {
        root.join("<MyJoinEntity>");
    } else {
        root.fetch("<MyJoinEntity>");
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...