2010-04-30 4 views
8

Im face à un problème simple avec la recherche d'entités par une (sous) chaîne, qu'ils pourraient contenir.JPQL (JPA) recherche sous-chaîne

E.g. J'ai des utilisateurs user1, usr2, useeeer3, user4 et je vais entrer dans la fenêtre de recherche "use" et je pense retourner user1, useeer3, user4.

Je suis sûr de savoir ce que je veux dire maintenant. Y a-t-il des constructions en JPA (JQPL)? Ce serait bien de chercher en utilisant WHERE d'une manière ou d'une autre dans les requêtes nommées. Quelque chose comme "SELECT u FROM utilisateur u O u nom u.nom contient: sous-chaîne"

Répondre

13

Utilisez une expression LIKE. Voici une citation de la section 4.6.9 Comme expression de la spécification JPA 1.0 (JSR 220):

La syntaxe de l'utilisation de l'opérateur de comparaison [NOT] LIKE dans une expression conditionnelle est la suivante:

string_expression [NOT] LIKE pattern_value [ESCAPE escape_character] 

Le expression_chaîne doit avoir une valeur de chaîne . Le pattern_value est un paramètre d'entrée littéral ou une valeur de chaîne chaîne dans laquelle un trait de soulignement (_) représente un seul caractère, une pour cent (%) caractères représente une séquence de caractères (y compris la séquence vide) , et tous les autres caractères représentent eux-mêmes. Le option escape_character est une chaîne unique caractère littéral ou un paramètre d'entrée d'une valeur de caractères (à savoir, char ou Character) et est utilisé pour échapper à la signification particulière de les caractères de soulignement et le pourcentage dans pattern_value.

Des exemples sont les suivants:

  • address.phone COMME '12% 3' est vrai pour '123' '12993' et fausse pour '1234'
  • asentence.word LIKE « l_se 'est vrai pour les 'perdre' et faux pour 'lâche'
  • aword.underscored LIKE '\ _%' ESCAPE '\' est vrai pour '_foo' et faux pour 'bar'
  • address.phone PAS COMME% 3' '12 est faux pour '123' et '12993' et vrai pour '1234'

Si la valeur de la string_expression ou pattern_value est NULL ou inconnu, la valeur de l'expression LIKE est inconnue. Si le escape_character est spécifié et est NULL, la valeur de l'expression LIKE est inconnue.

+0

Merci beaucoup :-) – JavaBeginner