Spring Boot репозиторий с примером, спецификацией и Pageable вместе - PullRequest
1 голос
/ 13 апреля 2020

Мне нужно сделать сложный pagitable фильтр в репозитории. Я преуспел, используя Пример и Pageable с расширением:

extends JpaRepository <Card, Long>

Что, в свою очередь, распространяется с:

extends PagingAndSortingRepository <T, ID>, QueryByExampleExecutor <T>

Прямо сейчас вызов таков:

Page<Card> findByCreatedDateBetween (Example<Card> exampleCard, Pageable pageable);

ПРОБЛЕМА : мне нужно выполнить поиск по дате, которая должна быть между двумя указанными датами. В Example<Card> невозможно указать диапазон.

Я думал сделать это с помощью спецификации, но я не знаю, как сделать вызов с 3 параметрами:

Page<Card> findByCreatedDateBetween (Specification<Card> cardSpecification, Example<Card> exampleOffer, Pageable pageable);

То же самое есть другое решение?

1 Ответ

1 голос
/ 13 апреля 2020

Вы не можете использовать как Example, так и Specification в одном запросе, поскольку QueryByExampleExecutor не предоставляет такой метод.

Вы также можете посмотреть на SimpleJpaRepository, если вы заинтересованы в реализации QueryByExampleExecutor. Внутренне реализация создает Specification из Example, используя QueryByExamplePredicateBuilder. Вы можете использовать это для создания своего собственного Specification из Example, используя его, а затем объединить это Specification с другим.

ExampleSpecification в SimpleJpaRepository является частным, так что Вы не можете использовать это, но вы можете скопировать его, а затем сделать что-то вроде

findAll(ExampleSpecification(yourExample, escapeCharacter).and(yourDateRangeSpecification), pageable);
...