Соответствие строки HQL на полных словах? - PullRequest
2 голосов
/ 03 февраля 2009

Как мне сопоставить полные слова в Hibernate HQL-запросе? Например, представьте, что в нашей базе данных есть запись «Сэм Адамс». Теперь, учитывая этот фрагмент HQL:

book.character like 'Sam'

Я не соответствую "Сэму Адамсу".

Однако, если я изменю свой запрос на:

book.character = 'Sam%'

тогда я тоже подхожу к "Саманте". Но я не хочу, чтобы это совпадало с вариантами слова «Сэм»; Я только хочу соответствовать по полному слову "Сэм".

(И, соответственно, было бы хорошо, если бы запрос «Сэм Адамс» тоже совпадал, поскольку это два полных слова.)

Ответы [ 2 ]

5 голосов
/ 03 февраля 2009

Поскольку HQL отображается непосредственно на функциональность SQL LIKE, а функциональность LIKE не поддерживает регулярные выражения, вам придется проявить изобретательность и сделать что-то вроде:

book.character как "Sam Sam" ИЛИ book.character как "% Sam" ИЛИ book.character как "% Sam%" ИЛИ book.character = 'Sam'

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

1 голос
/ 30 марта 2012

Этот тип поиска намного лучше обрабатывается полнотекстовой поисковой системой, такой как Lucene. Hibernate Search оборачивает Lucene, поэтому в этом случае будет хорошим вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...