JPQL (JPA) recherche une chaîne

Je suis confronté à un problème simple avec la recherche d’entités par une (sous) chaîne, qu’elles pourraient contenir.

Par exemple, j’ai les utilisateurs user1, usr2, useeeer3, user4 et je vais entrer dans la fenêtre de recherche “use” et je compte retourner user1, useeer3, user4.

Je suis sûr que vous savez ce que je veux dire maintenant. Y a-t-il une construction dans JPA (JQPL)? Il serait bien de chercher en utilisant WHERE dans les requêtes nommées. Quelque chose comme “SELECT u FROM utilisateur u WHITE u.nickname contient: subssortingng”

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 d’utilisation de l’opérateur de comparaison [NOT] LIKE dans une expression conditionnelle est la suivante:

 ssortingng_expression [NOT] LIKE pattern_value [ESCAPE escape_character] 

L’expression_chaîne doit avoir une valeur de chaîne. pattern_value est un littéral de chaîne ou un paramètre d’entrée à valeur de chaîne dans lequel un trait de soulignement (_) correspond à un caractère unique, un pourcentage (%) à toute séquence de caractères (y compris la séquence vide) et tous les autres caractères. pour eux-mêmes. Escape_character facultatif est un littéral de chaîne d’un seul caractère ou un paramètre d’entrée à caractère (c.-à-d., char ou Character ) et permet d’échapper à la signification particulière des caractères de soulignement et de pourcentage dans pattern_value .

Les exemples sont:

  • address.phone LIKE ‘12% 3 ‘est vrai pour’ 123 ” 12993 ‘et faux pour’ 1234 ‘
  • asentence.word LIKE ‘l_se’ est vrai pour ‘perdre’ et faux pour ‘lâche’
  • aword.underscored LIKE ‘\ _%’ ESCAPE ‘\’ est vrai pour ‘_foo’ et faux pour ‘bar’
  • address.phone NOT LIKE ‘12% 3 ‘est false pour’ 123 ‘et’ 12993 ‘et true pour’ 1234 ‘

Si la valeur de ssortingng_expression ou de pattern_value est NULL ou inconnue, la valeur de l’expression LIKE est inconnue. Si escape_character est spécifié et vaut NULL , la valeur de l’expression LIKE est inconnue.