2009-02-03 11 views
2

Comment puis-je faire correspondre des mots complets dans une requête HQL Hibernate? Par exemple, imaginez dans notre base de données que nous avons une entrée "Sam Adams". Maintenant, étant donné ce fragment HQL:Chaîne HQL correspondant à des mots complets?

book.character like 'Sam' 

Je ne correspondent pas sur "Sam Adams".

Cependant, si je change ma requête:

book.character = 'Sam%' 

je Correspondre aussi sur "Samantha". Mais, je ne veux pas que cela corresponde aux variantes du mot "Sam"; Je veux seulement faire correspondre le mot complet "Sam".

(et, par extension, ce serait bien pour la requête « Sam Adams » pour correspondre aussi, car cela est deux mots complets.)

Répondre

5

Depuis le HQL cartes directement à la fonctionnalité SQL LIKE et LIKE la fonctionnalité ne prend pas en charge les expressions régulières, vous devez être créatif et faire quelque chose comme:

book.character comme 'Sam%' OU book.character comme '% Sam' OU book.character comme '% Sam%' OU book.character = 'Sam'

Cela peut ne pas être la syntaxe exacte, mais vous obtenez le point. Et si vous n'avez pas réalisé, la performance sur ce mauvais garçon ne va pas être quelque chose d'impressionnant.

+0

Ouais - probablement un scan de table s'il ne fait pas attention! – Pat

1

Ce type de recherche est beaucoup mieux géré par un moteur de recherche de texte intégral comme Lucene. Hibernate Search encapsule Lucene donc serait une bonne option dans ce cas.

Questions connexes