2017-10-21 3 views
-1

Kann ich Sortierparameter nicht am Ende Ausdruck geben? Weil ich sort Parameter innerhalb der over() Funktion verwenden muss.Spring Daten mit Sortierung nicht am Ende

Beispiel:

@Query(value = "...?2...over(?4)...?1...?3") 
myMethod(int a,int b,int c,Sort sort); 

oder Ausdruck für innen über Art:, - # sortieren \ n, # {# sort} ..

ich immer noch:

java .lang.IllegalArgumentException: Die Validierung für die Methode fehlgeschlagen. public abstract java.lang.Integer ... Name der Methode .. (int, int, int, org.springframework.data.domain.Sort)!

+1

Haben Sie lesen Sie die [doc] (https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa. query-methods.sorting)? Kannst du ein [mcve] posten und StackTrace abschließen? –

Antwort

0

Parameter des Typs Sort erhalten spezielle Behandlung von Spring Data JPA.

Selbst wenn das nicht der Fall wäre, was Sie erreichen möchten, kann dies nicht mit einem einfachen Bindeparameter erreicht werden, da Bindeparameter an diesen Stellen von SQL erlaubt sind.

Je nachdem, was Sie erreichen wollen, könnten Sie in der Lage sein, so etwas wie die folgenden Funktionen ausführen:

@Query("select .... over(... order by CASE ?1 WHEN "first THEN first 
    WHEN 'last' THEN last 
    END") 
public Something method(String columnNameForSorting) 

vorausgesetzt, Sie die Spalten haben first und last Sie zwischen wechseln zum Sortieren.

Standard SQL alternative to Oracle DECODE für weitere Informationen über die CASE-Ausdruck

+0

Für die direkte Vervollständigung Zeichenfolge in Like (Reihenfolge von? 4) in die SQL, sql zurückgegebenes schlechtes Ergebnis. Aber wenn ich es so versuchte, wie du geschrieben hast, war es gut. Vielen Dank! – Victorio

+0

Wenn dies das Problem löst, akzeptieren Sie es bitte (klicken Sie auf das Häkchen) und upvote es. Besonders das Häkchen macht es für andere offensichtlich, die Frage zu finden, was das Problem löst. –