Как для потоковой передачи результатов весной данных JPA с пользовательскими критериями - PullRequest
0 голосов
/ 05 октября 2018

Я работаю над POC, используя Spring Boot 2.0.5, Spring Data JPA, используя Hibernate.Я пытаюсь реализовать способ потоковой передачи наборов результатов для пользовательских критериев.Я видел примеры вроде

public interface MyRepository implements JPARepository<Person,Long>{
    @Query("select p from person p")
    Stream<Person> findAll();
}

Однако я расширяю SimpleJPARepository и хочу получить результаты в виде потока, используя Criteria что-то вроде

Stream<Person> findAll(Criteria criteria);

Так как яиспользуя класс, который расширяет SimpleJPARepository, мне нужно предоставить свою реализацию.Но есть ли методы в SimpleJPARepository или его родительских классах, которые могут предоставить мне реализацию по умолчанию, используя предоставленные мной критерии.Любая ссылка на такой пример очень полезна.

Кроме того, в некоторых примерах я вижу, что используется @NoRepositoryBean, а в некоторых случаях @Repository.Я запутался между этими двумя и какой из них я должен использовать и почему?

1 Ответ

0 голосов
/ 05 октября 2018

В соответствии со спецификациями Spring Data JPA Spring Data JPA , так вы можете создавать запросы Criteria.

Шаг 1: расширить интерфейс репозитория с помощью интерфейса JpaSpecificationExecutor, как показано ниже.:

public interface CustomerRepository extends CrudRepository<Customer, Long>, JpaSpecificationExecutor {
 …
}

Шаг 2: метод findAll возвращает все сущности, соответствующие спецификации, как показано в следующем примере:

List<T> findAll(Specification<T> spec);

Шаг 3: Интерфейс спецификации определяется следующим образом:

public interface Specification<T> {
  Predicate toPredicate(Root<T> root, CriteriaQuery<?> query,
            CriteriaBuilder builder);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...