Spring Data, как повторно использовать спецификации в запросе количества? - PullRequest
0 голосов
/ 08 сентября 2018

Я использую Spring Data для своих репозиториев и хочу иметь возможность комбинировать простые спецификации для создания сложных запросов. Это не сложная задача, используя класс Specifications и применяя вспомогательные методы and, or, а затем вызывая метод findAll класса JpaSpecificationExecutor<T>, который принимает Specification<T>.

Основная проблема заключается в том, что я хочу повторно использовать существующие спецификации и вместо непосредственного получения списка результатов применить к спецификации count статистическую функцию или groupBy статистическую функцию и получить результат статистической функции в виде Long результат или List<Tuple>.

Чтобы быть более конкретным, я привел простой пример:

public Specification<Person> getByNameSpec(String name) {
    return (root, query, builder) -> {
        return builder.equal(root.get(Person_.firstName), name);
    };
}

В этом примере у меня есть метод с именем getByNameSpec в моем классе PersonServiceImpl, который предназначен для многократного использования. Я хочу использовать эти спецификации в трех сценариях:

  1. Подсчитайте количество людей по имени "Джон"
  2. Группа людей по имени "Джон" в другом поле, например job и количество каждой группы
  3. Выберите только одно или два поля людей с именем "Джон"

Обратите внимание, что я намерен интенсивно использовать спецификации таким образом, если эти операции возможны. Если это невозможно, как мне создать некоторые базовые критерии и повторно использовать их по всему коду?

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