2014-10-15 13 views
11

Czy można stosować zarówno adnotację, jak i specyfikację @Query w jednej metodzie repozytorium? Na przykład chciałbym mieć metody takie jak to:Czy mogę połączyć definicję @Query z danymi technicznymi w jednej z metod repozytorium Spring Data JPA?

@Query(value="SELECT e from EMPLOYEE where firstName <> ?1") 
public Page<Employee> findEmployeeBySomethigFancy(String firstName, Pageable pageable, Specification<Employee> emp); 

Czy to możliwe, czy mam zbudować całą kwerendę jako Predicate i usunąć @Query adnotacji?

Odpowiedz

8

Najpierw najpierw przeczytaj ten numer blog post. Po drugie, zgodnie z interfejsem JpaSpecificationExecutor, że repozytoria powinny stosować można uruchomić następujące kwerendy przy użyciu Dane techniczne:

  • count (Specyfikacja SPEC)
  • Lista findAll (specyfikacja Spec)
  • Page findAll (Specyfikacja spec stronicowalnej stronicowalnej)
  • Lista findAll (Specyfikacja spec Sortuj sort)
  • T findOne (specyfikacja Spec)

Więc nie możesz mieszać @Query (lub metod zapytania) i specyfikacji.

można wyrazić tego warunku:

firstName <> ?1 

użyciu Specyfikacja zamiast. Następnie możesz połączyć tyle specyfikacji, ile chcesz.

+0

Dzięki za odpowiedź! Wiem, że mogę łączyć tyle specyfikacji, ile chcę, ale mam kilka metod z adnotacją * @ Query *, a teraz jest potrzeba użycia Specyfikacji, więc muszę przepisać istniejące zapytania na obiekty Specyfikacji. Pomyślałem, że być może istnieje sposób na połączenie * @ Query * i specyfikacji. – woytech

+0

Z punktu widzenia implementatora API znacznie łatwiej jest oddzielić te obawy i zaoferować określone funkcje zapytań. Łączenie ich może jeszcze bardziej skomplikować implementację. –

+2

Ten temat jest niesamowity, muszę wykonać sprzężenie wielu do wielu w metodzie zapytań JPA, a ja przekazuję element Specyfikacja i Pageable. Na pewno nie można z nim mieszać @Query (testowałem). I to nie przynosi odpowiedzi na moją filiżankę. nie wiem, jak zarządzać, aby uzyskać moje zapytanie odpowiadające tabeli relacji i zachowując moją specyfikację i przedmioty możliwe do wyświetlenia :( – Alex

Powiązane problemy