2015-09-22 20 views
14

Desidero scrivere alcuni metodi di query nel livello repository. Questo metodo deve ignorare i parametri null. Ad esempio:Parametro opzionale dati di primavera nel metodo query

List<Foo> findByBarAndGoo(Bar barParam, @optional Goo gooParam); 

Questo metodo deve essere di ritorno Foo da questa condizione:

bar == barParam && goo == gooParam; 

se gooParam non nullo. se gooParam era nullo, le condizioni cambiano in:

bar == barParam; 

Esiste una soluzione? Qualcuno può aiutarmi?

+2

Di cosa stai parlando esattamente? –

+0

lista findByBarAndGoo (barra, @opzionale Goo goo) {if (bar == null || goo == null) {throw new IllegalArgumentException ("I parametri non possono essere nulli");}} – erhun

+0

Voglio dire nel parametro opzionale se questo parametro era nullo quindi il metodo di interrogazione IGNORA questo parametro. Grazie. –

risposta

-2

è possibile codificare da soli in poche righe:

List<Foo> findByBarAndOptionalGoo(Bar bar, Goo goo) { 
    return (goo == null) ? this.findByBar(bar) : this.findByBarAndGoo(bar, goo); 
} 

In caso contrario, non so se Primavera-Data supporta questa out of the box.

8

Non credo che sarete in grado di farlo con l'approccio del nome metodo alla definizione della query. Dalla documentazione (reference):

Anche se ottenere una query derivato dal nome del metodo è abbastanza conveniente, si potrebbe affrontare la situazione in cui il metodo nome parser non supporta la parola chiave si vuole utilizzare o il metodo nome diventerebbe inutilmente brutto. Quindi è possibile utilizzare JPA nominato query attraverso una convenzione di denominazione (vedere Uso JPA NamedQueries per ulteriori informazioni) o meglio annotare il metodo di query con @query

Penso che bisogna che la situazione qui, quindi la risposta qui sotto utilizza l'approccio di annotazione @Query, che è quasi altrettanto conveniente dell'approccio del metodo (reference).

@Query("select foo from Foo foo where foo.bar = :bar and " 
     + "(:goo is null or foo.goo = :goo)") 
    public List<Foo> findByBarAndOptionalGoo(
     @Param("bar") Bar bar, 
     @Param("goo") Goo goo);