2010-04-30 16 views
8

Im frente a un problema simple con la búsqueda de entidades por alguna (sub) cadena, que pueden contener.Subcadena de búsqueda JPQL (JPA)

E.g. Tengo usuarios user1, usr2, useeeer3, user4 e ingresaré a la ventana de búsqueda "use" y espero devolver user1, useeer3, user4.

Estoy seguro de que sabes lo que quiero decir ahora. ¿Hay alguna construcción en JPA (JQPL)? Sería bueno buscar usando WHERE de alguna manera en consultas con nombre. Algo así como "SELECCIONAR DESDE EL USUARIO DONDE u.nickname contiene: subcadena"

Respuesta

13

Use una expresión LIKE. Aquí es una cita de la sección 4.6.9 Como Expresión de la especificación JPA 1.0 (JSR 220):

La sintaxis para el uso del operador comparación [NOT] LIKE en una expresión condicional es como sigue:

string_expression [NOT] LIKE pattern_value [ESCAPE escape_character] 

El string_expression debe tener un valor cadena. El pattern_value es una cadena literal o un parámetro entrada de cadena de valor en el que un carácter de subrayado (_) representa cualquier carácter individual, a (%) carácter ciento significa cualquier secuencia de caracteres (incluyendo la secuencia vacía ) y todos los demás caracteres representan por sí mismos. El escape_character opcional es una cadena solo carácter literal o una parámetro de entrada de caracteres de valor (es decir, char o Character) y es utilizado para escapar el significado especial de el subrayado y el porcentaje de caracteres en pattern_value.

ejemplos son:

  • address.phone LIKE '12% 3' que es cierto para '123' '12993' y falso de '1234'
  • asentence.word l_se LIKE' "es cierto para 'perder' y falso de 'suelta'
  • aword.underscored COMO '\ _%' ESCAPE '\' es cierto para '_foo' y falsa de 'bar'
  • address.phone NOT LIKE '12% 3' es falsa para '123' y '12993' y verdadero de '1234'

Si el valor de la string_expression o pattern_value es NULL o desconocido, el valor de la expresión LIKE es desconocido. Si se especifica escape_character y es NULL, se desconoce el valor de la expresión LIKE .

+0

Muchas gracias :-) – JavaBeginner

Cuestiones relacionadas