2017-12-15 3 views
0

Meine benannte Abfrage ist ziemlich lang, weil die Verwendung von Like mit OR als Objektbaum ziemlich groß ist. Können wir möchten und in zusammen in Benannte Abfrage verwenden:Hibernate: Ist es möglich, Like und In zusammen in Named Query zu verwenden?

#Mysql 
@NamedQuery(name="getDhahush", query="SELECT d.pid FROM Dhahush d WHERE lower(d.person.telephon.mobile.mobno) LIKE lower('78129%') OR lower(d.person.telephon.mobile.mobno) LIKE lower('8129%') OR lower(d.person.telephon.mobile.mobno) LIKE lower('5159%')") 

Die zugrunde liegende Datenbank MySQL.

Antwort

0

LIKE nicht mit IN in Verbindung verwendet werden

e.g. 
mobno LIKE IN ('781%','719%') 

Aber ich würde die untere von dem unteren (d.person.telephon.mobile.mobno) zu entfernen, weil erstens es eine Zahl ist und nicht erfordern niedriger und zweitens und am wichtigsten, niedere() Funktion wird keinen Index bereits in der Spalte "mobno" Prost.

0

Verwenden Sie stattdessen ANY.

Ihre Anfrage wird so etwas wie dies in PostgreSQL:

select 'foo' like any(array['f%', '%o%', '&t']); 

MySQL nicht, dass die genaue Syntax unterstützen, aber Sie können etwas ähnliches mit einer Unterabfrage tun:

select 'foo' like any(select 'f%' union select '%o%' union select '&t'); 
Verwandte Themen