2017-05-21 4 views
0

Ich versuche eine Repository-Abfrage-Methode zu implementieren, um eine Adresse nach ihrem Hausnamen zu suchen. Ich möchte, dass diese Suchanfrage die Groß-/Kleinschreibung nicht berücksichtigt.Spring EL - Syntax für case-insensitive LIKE?

Ich habe die folgende Suchmethode im Adressrepository definiert. Bei dieser Suche wird jedoch die Groß- und Kleinschreibung berücksichtigt.

@Query(value = "select ad from #{#entityName} ad where ad.houseName LIKE :houseName%") 
    public Page<LocalAddress> findByHouseName(@Param("houseName") String houseName, Pageable page); 

Wie mache ich diese Abfrage unabhängig von Groß- und Kleinschreibung?

+0

Mögliches Duplikat [Wie kann ich (Groß- und Kleinschreibung) in einer Spalte zu suchen LIKE Wildcard verwenden?] (http://stackoverflow.com/questions/2876789/how-can-i-search-case-insensitive-in-a-column-using-like-wildcard) – jediz

+0

@DeltaCharlie Wenn meine Antwort Ihnen geholfen hat Bitte vergessen Sie nicht, es zu akzeptieren) – Cepr0

Antwort

0

Nun, das ist eher eine Frage einer Datenbank-Engine. SpEL wertet nur den Ausdruck aus und ersetzt den Platzhalter durch einen Wert. Siehe Frage How can I search (case-insensitive) in a column using LIKE wildcard?

+0

So ist es nicht möglich Suche nach Groß- und Kleinschreibung in LIKE in SPEL? Ich möchte nicht, dass meine Abfrage an eine bestimmte DB-Engine gebunden ist. –

+0

Es klingt, als ob Sie versuchen, das falsche Werkzeug zu verwenden, um die Aufgabe zu erledigen. Wie würden Sie erwarten, dass Spring das Feature implementiert? Ich bezweifle, dass es intelligent genug ist, um Ihre Anfrage magisch neu zu schreiben (es müsste alle Datenbankanbieter unterstützen). – jediz

+0

Ich denke ich verstehe deinen Standpunkt. Da die Syntax für die Groß- und Kleinschreibung LIKE auf der Basis der DB-Engine unterschiedlich ist, ist es nicht möglich, eine dynamische Abfrage mit SpEL zu generieren, oder? –

2

Um Ihre Aufgabe zu implementieren Sie brauchen nicht manuell eine Abfrage schreiben, benutzen Sie einfach eine Spring Data magic:

Page<LocalAddress> findByHouseNameIgnoreCaseContaining(String partOfHouseName, Pageable page); 

Diese Methode wird Groß- und Kleinschreibung like Operator verwenden und holen Sie Ihre Daten unabhängig von DB.


Trotzdem können Sie dies explizit in der JPQL Abfrage angeben:

@Query("select a from LocalAddress a where upper(a.houseName) like concat('%', upper(?1), '%')") 
Page<LocalAddress> getByName(String partOfHouseName, Pageable page) 

Mehr Infos hier: JPQL Reference

+0

Ich kenne diese Methode bereits. Ich habe gerade versucht, dasselbe mit SPEL zu implementieren. Bei findBy-Abfragen werden die Namen manchmal zu lang, so dass es eine Alternative geben muss. –

+0

@DeltaCharlie Ich habe meine Antwort aktualisiert ... – Cepr0

Verwandte Themen