Spring Data (Hibernate) Dynami c WHERE предложение - PullRequest
0 голосов
/ 06 марта 2020

У меня есть такой репозиторий

@Repository
public interface LeadRequestRepository extends PagingAndSortingRepository<LeadRequest, UUID> {

    @Query(value = "SELECT * FROM lead_request WHERE product IN :products AND current_status in :status", nativeQuery = true)
    List<LeadRequest> findLeadRequests(@Param("products") List<String> products, @Param("status") List<String> status);

}

В этом запросе статус может быть нулевым или пустым списком.
В этом случае запрос должен возвращать все состояния (NEW, APPROVED, REJECTED и др. c). Другими словами, запрос должен стать SELECT * FROM lead_request WHERE product IN :products, а не status.
Я также запутался, потому что я использую IN предложение, поэтому я не могу использовать JPA Example API

Как я могу добиться этого с помощью Hibernate и JPA?

1 Ответ

0 голосов
/ 06 марта 2020

Есть два варианта:

  1. У вас будет два JPQL / нативных запроса, и на основании нулевого условия вы будете вызывать один или другой запрос.
  2. Лучше использовать вариант JPA критериальные запросы. Spring Data JPA предоставляет абстракцию для запросов критериев JPA, называемых Specifications. Взгляните на документы Spring Data JPA здесь
...