HQL содержит оператор Howto?

У меня есть объект со строковым свойством под названием Tags. Я хотел бы запросить этот объект на основе того, находится ли определенная строка в свойстве Tags.

Так, например, у меня была бы функция IList GetEntityByTag (string tag), которая вернет все Entity, которые имеют значение tag в их свойстве «Tags».

Я попытался использовать подход ICriteria... Expression.In(PropertyName, Value), но это полная противоположность. Мне нужно что-то вроде Expression.In(Value, PropertyName).

Возможно, IQuery был бы лучшей стратегией, но я не смог найти какой-либо статус HQL для Property CONTAINS 'abc'.

Любая помощь или точка направления были бы очень благодарны!


person Community    schedule 08.02.2009    source источник
comment
Вот ссылка на отличную статью о выражениях и о том, как использовать критерии: javalobby.org/articles/hibernatequery102   -  person nasty pasty    schedule 11.08.2011


Ответы (2)


Вы имеете в виду Expression.Like(PropertyName, Value)?

person Alex Reitbort    schedule 08.02.2009
comment
Привет, Алекс, это похоже на Expression.In, но все же противоположно тому, что мне нужно. Я хочу знать, существует ли значение в PropertyName. Нет, если PropertyName существует в значении - person ; 08.02.2009
comment
Если только... скажем, моя собственность, "Теги" = a;b;c;d;e. Я хочу знать, существует ли «а» в тегах. Будет ли Expression.Like(Tags, a) возвращать true? - person ; 08.02.2009

Если вы хотите узнать, является ли тег подстрокой в ​​свойстве «Теги», вы можете воспользоваться следующими советами:

  • Возможно, вы захотите сначала преобразовать строку, которую вы ищете, и ищете в нижний регистр. Expression.ilike сделает это за вас. Счет.
  • Чтобы узнать, находится ли ваш поисковый запрос где-либо в поле, вы можете установить для параметра MatchMode в функции ilike значение MatchMode.ANYWHERE.

Если, как вы заметили ранее,

скажем, моя собственность, «Теги» = a;b;c;d;e. Я хочу знать, существует ли «а» в тегах. Будет ли Expression.Like("Tags", "a") возвращать true?

Если 'a;b;c;d;e' является строкой, Expression.ilike("Tags", "a", MatchMode.ANYWHERE) вернет true.

person jedierikb    schedule 10.02.2009
comment
как бы вы это сделали с помощью IQuery? - person ; 12.04.2009