2016-03-23 4 views
0

Я новичок в Hibernate, и я создаю простое приложение для поиска фильмов на Java. Мне нужно сделать запрос в моем dao для поиска фильмов по списку ключевых слов. Я знаю, как это сделать в SQL, но мне было интересно, есть ли способ сделать запрос HQL для этого. Метод Java в дао получает список, который представляет собой список keyowrds и SQL заявление, как это:Есть ли способ сделать этот запрос в HQL?

SELECT * 
FROM movies 
WHERE name LIKE '%keyword1%' OR name LIKE 'keyword2' ... 

Так для достижения этой цели необходимо перебирать корыта всего списка и сцепить запрос для каждого ключевого слова.

Возможно, сделать этот запрос более простым в HQL, поэтому вы можете передать список ключевых слов в запрос qu, чтобы он мог использовать его с инструкцией LIKE?

Спасибо.

ответ

1
SELECT * 
FROM movies 
WHERE name LIKE '%keyword1%' OR name LIKE 'keyword2' 

бы перевести HQL в

from movies m where m.name like :keyword1 or m.name like :keyword2 

Вам необходимо будет пройти названные параметры keyword1 и keyword2 при запросе.

И если вы настаиваете на использовании совпадений like, вам нужно будет перебрать список и динамически генерировать запрос.

Другой вариант состоит в том, чтобы фактически использовать предложение IN с HQL, которое, тем не менее, сделало бы подстановочные знаки невозможными.

from movies m where m.name in (:keywords) 
+0

Привет, спасибо за Ваш ответ! Мне нужно использовать подстановочный знак SQL «%», поэтому единственный способ - перебрать список ключевых слов и построить строку запроса в правильном направлении? Также мне нужно повторить список во второй раз, чтобы правильно установить параметры? Благодаря! –

+0

Да. Но вы можете создавать параметры на одной и той же итерации. – Thihara

+0

В этом случае вам может быть проще использовать стандартные параметры '?' Вместо параметров 'named'. – Thihara

0
Query qry = session.createQuery("From RegistrationBean as rb where rb."+searchCriteria+" like :sf"); 
qry.setString("sf",'%'+searchField+'%'); 
Смежные вопросы