2011-12-14 68 views
20

¿Hay un operador concat JPA para la concatenación de cadenas?Operador concat JPA

Sé que hay una función JPA CONCAT, pero es fea para concatenar varias cadenas.

CONCAT(CONCAT(CONCAT(cola,colb),colc),cold) 

proveedores como Oracle oferta || alguna otra oferta como Microsoft +. ¿Hay un operador de concatenación APP estándar, de modo que podía crear una consulta como

cola || colb || colc || cold 

Probé + usando openjpa con SQL Server, sin embargo, parece ser JPQL válido. No pude encontrar nada con respecto a dicho operador en un oracle reference.

Respuesta

33

La función CONCAT se amplió en JPA 2.0 para permitir pasar más de 2 parámetros, de la sección 4.6.17.2.1 (Funciones de cadena) de la especificación:

CONCAT(string_primary, string_primary {, string_primary}*) 

En JPA 1 esto estaba restringido a exactamente dos parámetros.

+0

Hmm. Extraño. http://download.oracle.com/otn-pub/jcp/persistence-2.0-fr-eval-oth-JSpec/persistence-2_0-final-spec.pdf enumera esta función tal como la describió. Openjpa 2.1.1 debe ser JPA 2.0. –

+1

OpenJpa 2 debe admitir esta sintaxis, ¿puede publicar la consulta exacta y la excepción que está recibiendo? –

7

Puede usar la función JPA Concat para múltiples cadenas.

Por ejemplo:

CONCAT(cola, colb, colc, cold) 
+1

comprobado que. Me sale una excepción con openjpa. La referencia que vinculé (http://docs.oracle.com/cd/E16764_01/apirefs.1111/e13946/ejb3_langref.html#ejb3_langref_string_fun) también muestra solo dos argumentos. –

6

También puede utilizar || como un operador de concatenación, ver on the documentation

HQL define un operador de concatenación, además de apoyar la función concatenación (CONCAT). Esto no está definido por JPQL, por lo que las aplicaciones portátiles deben evitar su uso. El operador de concatenación se toma del operador de concatenación SQL - ||.

Ejemplo 11.19. Ejemplo de operación de concatenación

select 'Mr. ' || c.name.first || ' ' || c.name.last 
from Customer c 
where c.gender = Gender.MALE