2013-08-20 2 views
0

Проблема: В разделе запроса hql соответствует только первый элемент списка, разделенного запятой!Предложение Hibernate HQL IN соответствует только первому элементу списка

Запрос HQL как это: from News where 93 IN (pictureIds)

Новости юридическое лицо:

public class News { 
    String id; 
    String pictureIds; // comma separated list of pictureIds 
} 

Примечание: если я изменю HQL запрос и жёстко в pictureIds его результат является правильным!

Как я могу изменить свой запрос для решения проблемы?

+0

вы используете шаблон спящего режима, чтобы сделать это .. ?? – Dileep

+0

Я использую Hibernate, Criteria и Criterion для создания HQL. – SMHJamali

ответ

1

Попробуйте это:

from News where pictureIds LIKE '%,93,%' 

запятые добавлены в начале и в конце.

+0

не работает, ничего не соответствует. – SMHJamali

+0

Обновлено. Надеюсь, эта работа – user2698469

+0

Наконец-то я решил изменить структуру базы данных. – SMHJamali

0

Это будет сделано.

Query query = getSession().createQuery("Select * from News where pictureIds In (:List)") 
      .setParameterList("List",ListValues); 

Посмотрите here для основы использования HQL.

0

Я получил его на работу, но его довольно утомительно:

results?.eachWithIndex { output, i-> 
        if (i>0) { 
         sb.append(" or ") 
        } 
        sb.append(" ((dbres.Field like (:myVariablesA${i})) or (dbres.Field like (:myVariablesB${i})) or (dbres.Field like (:myVariablesC${i})) or dbres.Field=:myVariable${i})") 
        //capture within csv so aa,val,bb 
        myParams."myVariablesA${i}"='%,'+output+',%' 
        //capture as last element: aa,val 
        myParams."myVariablesB${i}"='%,'+output 
        //capture it as first element val,aa 
        myParams."myVariablesC${i}"=output+',%' 
        //finally capture it if its not a csv and its a physical set value 
        myParams."myVariable${i}"=output 
       } 

Это в заводной и добавление к элементу в StringBuilder (SB). Короче говоря,%, id,% для поля строки csv слишком велико. Добавив все вариации запятой, прежде чем после того, как и на своих собственных захватах всех варианты, которые могут существовать в реальной строке

Надеются, что это помогает кто-то еще

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