Ich versuche, eine JPQL-Abfrage mit einer Like-Klausel zu schreiben:
LIKE '%:code%'
Ich hätte gerne Code = 4 und finde
455 554 646 ...
Ich kann nicht bestehen :code = '%value%'
namedQuery.setParameter("%" + this.value + "%");
denn an einem anderen Ort brauche ich mich :value
nicht von den %
Zeichen einzuwickeln . Irgendeine Hilfe?
Antworten:
Wenn Sie tun
und dann tun
Dann bleibt der Wert frei vom% -Zeichen. Wenn Sie es an einer anderen Stelle in derselben Abfrage verwenden müssen, verwenden Sie einfach einen anderen Parameternamen als 'Code'.
quelle
"%" + this.value + "%"
ist, was entkommen ist.Ich verwende nicht für alle Abfragen benannte Parameter. Beispielsweise ist es ungewöhnlich, benannte Parameter in JpaRepository zu verwenden .
Um dies zu umgehen, verwende ich die JPQL CONCAT- Funktion (dieser Code emuliert den Anfang mit ):
Ich habe diese Technik in hervorragenden Dokumenten gefunden: http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa_overview_query.html
quelle
Sie können die JPA LOCATE-Funktion verwenden .
Zu Ihrer Information: In der Dokumentation zu meinem Top-Google-Hit wurden die Parameter umgekehrt.
quelle
Ich weiß nicht, ob ich zu spät komme oder nicht, aber meiner Meinung nach könnte ich es so machen:
quelle
Es gibt eine nette like () -Methode in der JPA-Kriterien-API. Versuchen Sie das zu nutzen, hoffe es wird helfen.
quelle
Wählen Sie i aus Instructor i aus, wobei i.Adresse LIKE CONCAT ('%',: Adresse, '%') ");
Verwenden Sie den folgenden Kriteriencode für dasselbe:
@Test public void findAllHavingAddressLike () {CriteriaBuilder cb = KriterienUtils.criteriaBuilder (); CriteriaQuery cq = cb.createQuery (Instructor.class); Root root = cq.from (Instructor.class); printResultList (cq.select (root) .where (cb.like (root.get (Instructor_.address), "% # 1074%"))); }}
quelle
Lass einfach das '' weg
quelle
Verwenden Sie jpqlRepository oder rawRepository in der Repository-Schnittstelle
}}
}}
quelle