2014-04-11 6 views
11

Sto provando a impostare una query dinamica utilizzando i dati di primavera, in pratica ho un array con un sacco di caratteristiche e ho bisogno di assemblare la query in base a quelle caratteristiche, più o meno qualcosa del tipo "WHERE = A AND characteristic = B AND characteristic = C "ma la quantità di caratteristiche può variare.query dinamica dati di primavera

Ho notato che posso usare l'annotazione @Query ma è possibile rendere pagabile il risultato della @Query?

C'è qualche altro modo per realizzare questo?

Page<Recipe> findDistinctByNameContainingAndOrganizationAndCharacteristicsInOrIngredientsContainingAndOrganizationAndCharacteristicsInOrDescriptionContainingAndOrganizationAndCharacteristicsInAllIgnoreCase(
     String name, Organization organization1, List<Characteristic> characteristic1, 
     String ingredients, Organization organization2, List<Characteristic> characteristic2, 
     String description, Organization organization3, List<Characteristic> characteristic3, 
     Pageable pageable); 
+0

Sì @ La query supporta Pageable –

+1

Prova a usare QueryDSL. Ad esempio, in questo caso è possibile inviare qualsiasi predicato per il proprio repository o servizio. http://www.querydsl.com/ –

+0

Per dichiarazioni di metodi come queste, esaminerei sicuramente altre opzioni come '@ Query' e Querydsl. Questo metodo è effettivamente inutilizzabile a causa del suo nome lungo e dell'elenco dei parametri. –

risposta

9

Sì. @Query supporta pageable .. e sì, c'è un altro modo per farlo.

Si potrebbe dare un'occhiata alla query di costruzione con criteri, che consente di aggiungere AND/OR in cui le condizioni dinamicamente. In realtà uso querydsl per facilitare il mio sviluppo.

In questo post potete trovare una buona spiegazione di stand: http://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

Benche potrebbe essere sembrare più complessa all'inizio, l'uso di questa caratteristica renderà il codice più coerente con la crescente complessità