Как искать по любому полю с нумерацией страниц - PullRequest
0 голосов
/ 22 февраля 2019

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

@Entity
public class Customer {

    @Id
    private Long id;

    private String firstName;

    private String lastName;

    private String phone;

    private String mail;
}

, тогда у меня есть мой интерфейс хранилища

public interface CustomerRepository extends PagingAndSortingRepository<Customer, Long> {

Optional<Customer> findById(Long id);
...
}

мой интерфейсрасширяет PagingAndSortingRepository, чтобы обеспечить постраничный результат.

У меня также есть поле ввода, в которое пользователь может поместить любую строку.Теперь я хочу вернуть ему страницу результатов, которая содержит входную строку в одном из полей (любое из полей клиентов).

Я не хочу использовать именованные запросы.Есть ли умный способ добиться этого с помощью репозитория PagingAndSortingRepository или мне нужно использовать интерфейс спецификации и реализовать нумерацию страниц?

1 Ответ

0 голосов
/ 22 февраля 2019

Разве вы не можете просто сделать:

@Query("select c from Customer c where c.firstName like :filter" 
           + " or c.lastName like :filter or c.emailAddress like :filter.......")
Page<Customer> filter(@Param("filter") String filter);

Альтернативно вы можете использовать QueryDsl.

Расширить дополнительный интерфейс:

public interface CustomerRepository extends PagingAndSortingRepository<Customer, Long>, QueryDslPredicateExecutor<Customer>{

}

Добавить соответствующие инструменты сборки:

Затем можно вызвать унаследованный метод:

Page<Customer> findAll(Predicate predicate, Pageable pageable)

, используемый как:

Page<Customer> page =repo.findAll(QCustomer.customer.firstName.like(filter)
     .or(QCustomer.customer.lastName.like(filter).or(...));

Ссылки:

https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

...