2012-06-06 11 views
21

Czy jest możliwe mieć podobne w klauzuli where w nazwanym zapytaniu? Próbuję wykonać następujące czynności, ale dostaję wyjątkiNazwana kwerenda z jak w przypadku gdzie klauzula

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

Próbowałem dodawać% tak, jak zrobiłbyś to w normalnym SQL, ale kompilowałeś wyjątki.

Wszelkie wskazówki są mile widziane!

Dzięki

+1

Co się dzieje, jeśli wziąć drugi jak z dolnej function() :) – Davos555

+0

Jako @ Davos555 punkty, brakuje nawiasu i cytatu: '" lower (p.countryName) like: countryName ");' –

+0

yes thanks - Skopiowałem to z bardziej skomplikowanego przykładu i nie zmieniłem go poprawnie. Zaktualizuję teraz pytanie: – RNJ

Odpowiedz

40

Nie może mieć% w NamedQuery, ale można mieć go w wartości przypisanej parametru.

Jak w:

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

działa dobrze. Dzięki esej! – RNJ

+0

fajnie! dzięki! : D – Fritz

2

Można również użyć funkcji 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

Witamy w Stack Overflow! Chociaż ten kod może odpowiedzieć na pytanie, zapewnienie dodatkowego kontekstu dotyczącego tego, dlaczego i/lub jak ten kod odpowiada na pytanie, poprawia jego długoterminową wartość. Odradza się tylko odpowiedzi w formie kodu. – Ajean