JPQL (JPA) поисковая подстрока - PullRequest
8 голосов
/ 01 мая 2010

Я столкнулся с простой проблемой поиска сущностей по какой-либо (под) строке, которую они могут содержать.

например. У меня есть пользователи user1, usr2, useeeer3, user4, и я войду в окно поиска «use», и я ожидаю возврата user1, useeer3, user4.

Я уверен, что вы теперь понимаете, о чем я. Есть ли строительство в JPA (JQPL)? Было бы неплохо как-то искать с использованием WHERE в именованных запросах. Что-то вроде «ВЫБЕРИТЕ У ОТ пользователя», ГДЕ содержится имя: substring:

1 Ответ

14 голосов
/ 01 мая 2010

Используйте выражение LIKE. Вот цитата из раздела 4.6.9 Подобное выражение спецификации JPA 1.0 (JSR 220):

Синтаксис для использования оператор сравнения [NOT] LIKE в Условное выражение выглядит следующим образом:

string_expression [NOT] LIKE pattern_value [ESCAPE escape_character]

Строковое выражение должно иметь строковое значение. pattern_value является строковый литерал или строковое значение входной параметр, в котором подчеркивание (_) обозначает любой отдельный символ, символ процента (%) обозначает любой последовательность символов (включая пустая последовательность) и все остальные персонажи стоят за себя. необязательный escape_character является односимвольный строковый литерал или символьный входной параметр (то есть char или Character) и является используется, чтобы избежать особого значения символы подчеркивания и процента в pattern_value.

Примеры:

  • address.phone LIKE «12% 3» верно для «123», «12993» и ложно для «1234»
  • asentence.word LIKE "l_se" верно для "проиграть" и ложно для "потерять"
  • aword.underscored LIKE ‘\ _% 'ESCAPE‘ \ ’верно для‘ _foo ’и false для ‘bar’
  • address.phone НЕ НРАВИТСЯ, «12% 3» ложно для «123» и «12993» и верно за 34 1234 ’

Если , то значение string_expression или pattern_value NULL или неизвестно, значение Как выражение неизвестно. Если escape_character указано и является NULL, значение как выражение неизвестно.

...