2014-04-11 24 views
11

Ich versuche, eine dynamische Abfrage mit Federdaten einzurichten, im Grunde habe ich ein Array mit einer Reihe von Eigenschaften und ich muss die Abfrage basierend auf diesen Eigenschaften, so ziemlich etwas wie "WHERE Merkmal = A AND-Charakteristik = B AND-Charakteristik = C ", aber die Menge an Eigenschaften kann variieren.Spring Data dynamische Abfrage

Ich habe festgestellt, dass ich die @Query-Annotation verwenden kann, aber ist es möglich, das Ergebnis von @Query umbuchbar zu machen?

Gibt es einen anderen Weg, dies zu erreichen?

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

machen @ Abfrage unterstützt umsetzbare –

+1

Verwenden Sie QueryDSL. In diesem Fall können Sie beispielsweise ein Prädikat für Ihr Repository oder Ihren Service senden. http://www.querydsl.com/ –

+0

Für Methodendeklarationen wie diese würde ich definitiv in andere Optionen wie '@ Query' und Querydsl schauen. Diese Methode ist aufgrund ihres langen Namens und ihrer Parameterliste effektiv nicht verwendbar. –

Antwort

9

Ja. @Query unterstützt seitenweise .. und ja, es gibt eine andere Möglichkeit, dies zu erreichen.

Sie könnten einen Blick auf die Erstellung von Abfragen mit Kriterien werfen, mit denen Sie UND/ODER-Bedingungen dynamisch hinzufügen können. Ich benutze querydsl, um meine Entwicklung zu erleichtern.

In diesem Beitrag, den Sie eine gute Erklärung von Stand finden: http://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

Altough es komplizierter zu Beginn scheinen könnte, wird die Verwendung dieser Funktion Ihres Code im Einklang mit zunehmender Komplexität Ja

Verwandte Themen