2016-03-29 5 views
0

Ich schreibe eine Select-Abfrage mit Spring JPA. Ich gebe Parameter ein, um sie mit einem Eintrag in der Datenbank zu vergleichen. Wo ich auf Probleme stoße (kompiliere nicht), wenn ich versuche, UPPER() mit dem contains (% Wert%) zu kombinieren. Z.B. % UPPER (Wert)%JPA-Repository-Abfrage mit Ignore Case

where ... AND (UPPER(l.name1) LIKE %UPPER(:search1)% OR UPPER(l.name2) LIKE %UPPER(:search2)% OR UPPER(l.name3) LIKE %UPPER(:search3)% 

search1, search2 und search3 sind Parameter in meiner Service-Implementierung übergeben wird. Gibt es eine andere Möglichkeit, diese Logik zu erhalten, wenn die Abfrage ignoriert wird? Oder fehlt mir etwas Kleines? Ich habe versucht, Beispiele zu finden, konnte aber keine finden, die sich direkt auf diese Situation beziehen.

Vielen Dank im Voraus für die Hilfe!

Antwort

1

Zunächst sollten Sie die SQL-Funktion (UPPER) nicht mit % sondern dem Literalwert umbrechen.

...AND (UPPER(l.name1) LIKE CONCAT('%', CONCAT(UPPER(:search1), '%'))...

Beachten Sie auch, dass Sie eine zusätzliche Klammer auf haben:

In jedem Fall ist die können Sie Ihr Problem mit CONCAT Funktion überwinden. Sie werden wahrscheinlich eine zusätzliche ) kurz nach LIKE %UPPER(:search3)%

Inspiriert von Parameter in like clause JPQL

+0

Danke hinzufügen müssen! Das hat funktioniert, was ich versucht habe! – Caleb