2014-10-15 6 views
11

È possibile utilizzare sia l'annotazione @Query sia le specifiche in un unico metodo di repository? Per esempio mi piacerebbe avere un metodo come questo:È possibile combinare una definizione e le specifiche @Query su un metodo di repository JPA di Spring Data?

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

E 'possibile o devo costruire l'intera query come Predicate e rimuovere il @Query annotazioni?

risposta

8

Per prima cosa è possibile leggere prima questo blog post. In secondo luogo, secondo l'interfaccia JpaSpecificationExecutor che i repository dovrebbero attuare è possibile eseguire le seguenti query utilizzando tecniche:

conteggio
  • (spec specifica)
  • Lista findAll (Specification spec)
  • Pagina findAll (spec specifica, paginabile paginabile)
  • Lista findAll (spec specifica, sort)
  • T findOne (spec specifica)

Quindi non è possibile combinare @Query (o metodi di query) e Specifiche.

è possibile esprimere questa condizione:

firstName <> ?1 

utilizzando una specifica invece. Quindi puoi combinare tutte le specifiche che vuoi.

+0

Grazie per la vostra risposta! So che posso combinare tutte le specifiche che voglio, ma ho un paio di metodi con annotazione * @ Query * e ora c'è bisogno di usare la specifica, quindi devo riscrivere le query esistenti agli oggetti della specifica. Ho pensato che forse c'è un modo per combinare in qualche modo * @ Query * e Specifica. – woytech

+0

Per il punto di vista dell'attuatore dell'API, è molto più semplice separare tali dubbi e offrire specifiche funzionalità di interrogazione. Combinarli potrebbe complicare ulteriormente l'implementazione. –

+2

Questo argomento è sorprendente, devo fare un join many-to-many su un metodo di query JPA e ho passato un oggetto Specification and Pageable. Di sicuro @Query non può essere mischiato con esso (l'ho provato). E questo non porta risposte alla mia tazza. non so come riuscire a ottenere la mia query corrispondente con una tabella delle relazioni e a mantenere i miei elementi Specification e Pageable :( – Alex

Problemi correlati