2012-06-06 11 views
21

È possibile avere un like in una clausola where in una query denominata? Sto cercando di fare quanto segue, ma sono sempre eccezioniQuery denominata con like in clausola where

@NamedQuery(name = "Place.getPlaceForCityAndCountryName", 
query = "SELECT p FROM Place p WHERE " + 
     "lower(p.city) like :city and " + 
     "lower(p.countryName) like :countryName"); 

Ho provato ad aggiungere% come si farebbe in SQL normale, ma ottenere eccezioni compilazione.

Qualsiasi suggerimento apprezzato!

Grazie

+1

Che cosa succede se si prende il secondo come fuori della funzione inferiore() :) – Davos555

+0

Come @ Davos555 punti, c'è una parentesi e una citazione mancante: '" lower (p.countryName) come: countryName ");' –

+0

sì grazie - Ho copiato questo da un esempio più complicato e non lo ho modificato correttamente. Aggiornerò la domanda ora – RNJ

risposta

40

Non si può avere il% nel NamedQuery, ma si può avere il valore si assegna il parametro.

Come in:

String city = "needle"; 
query.setParamter("city", "%" + city + "%"); 
+0

funziona bene. Grazie esej! – RNJ

+0

bello! Grazie! : D – Fritz

2

È inoltre possibile utilizzare la funzione CONCAT

@NamedQuery(name = "Place.getPlaceForCityAndCountryName", 
    query = "SELECT p FROM Place p WHERE " + 
     "lower(p.city) like CONCAT(:city,'%')"); 
2
@Query("select c from Curso c where c.descripcion like CONCAT(:descripcion,'%')") 

List<Curso> findByDescripcionIgnoreCase(@Param("descripcion") String descripcion); 
+1

Benvenuti in Stack Overflow! Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo sul perché e/o su come questo codice risponde alla domanda migliora il suo valore a lungo termine. Le risposte al solo codice sono scoraggiate. – Ajean