2012-06-06 2 views
21

Возможно ли иметь подобное в предложении where в именованном запросе? Я пытаюсь сделать следующее, но я получаю исключениеИменованный запрос с аналогичным предложением where

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

Я попытался добавляющим%, как вы могли бы сделать в обычном SQL, но получить исключение компиляции.

Все указания очень ценятся!

Благодаря

+1

Что произойдет, если вы берете второй, как из функции нижней() :) – Davos555

+0

Как @ Davos555 точки, есть скобка и цитата отсутствует: '" lower (p.countryName) like: countryName ");' –

+0

да спасибо - я скопировал это из более сложного примера и не изменил его правильно. Я сейчас обновлю вопрос – RNJ

ответ

40

Вы не можете иметь в% в NamedQuery, но вы можете иметь его в значении вы назначаете параметр.

Как и в:

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

работает хорошо. Спасибо esej! – RNJ

+0

приятно! благодаря! : D – Fritz

2

Вы также можете использовать функцию 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

Добро пожаловать в переполнение стека! Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно того, почему и/или как этот код отвечает на вопрос, улучшает его долгосрочную ценность. Кодовые ответы не приветствуются. – Ajean

Смежные вопросы