2011-12-14 8 views
20

Czy istnieje operator konkluzji JPA do łączenia ciągów?Operator konkurenta JPA

Wiem, że istnieje funkcja JPA CONCAT, jednak jest ona brzydka w użyciu do łączenia wielu łańcuchów.

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

dostawców jak Oracle ofercie || innego jak Microsoft ofertą +. Czy istnieje standardowy operator konkatenacji JPA, abym mógł utworzyć kwerendę jak

cola || colb || colc || cold 

próbowałem + użyciu OpenJPA z SQL Server, jednak wydaje się być niepoprawny JPQL. Nie mogłem znaleźć nic na temat takiego operatora w oracle reference.

Odpowiedz

33

Funkcja CONCAT rozszerzający JPA 2.0 aby umożliwić przepuszczanie więcej niż 2 parametry z sekcji 4.6.17.2.1 (Funkcje łańcucha znaków) specyfikacji:

CONCAT(string_primary, string_primary {, string_primary}*) 

W JPA 1 ograniczono się do dokładnie dwóch parametrów.

+0

Hmm. Dziwne. http://download.oracle.com/otn-pub/jcp/persistence-2.0-fr-eval-oth-JSpec/persistence-2_0-final-spec.pdf wyświetla tę funkcję zgodnie z opisem. Openjpa 2.1.1 powinien być w formacie JPA 2.0. –

+1

OpenJpa 2 powinna obsługiwać tę składnię, czy możesz podać dokładne zapytanie i otrzymany wyjątek? –

7

Możesz użyć funkcji JPA Concat dla wielu ciągów.

Na przykład:

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

Sprawdzone. Dostaję wyjątek z openjpa. Odwołanie I połączone (http://docs.oracle.com/cd/E16764_01/apirefs.1111/e13946/ejb3_langref.html#ejb3_langref_string_fun) pokazuje również tylko dwa argumenty. –

6

Można również użyć || jako operator złączyć patrz on the documentation

HQL określa operatorem konkatenacji, w uzupełnieniu do wspierania funkcji konkatenacji (CONCAT). Nie jest to zdefiniowane przez JPQL, więc przenośne aplikacje powinny go unikać. Operator konkatenacji pochodzi z operatora konkatenacji SQL - ||.

Przykład 11.19. Przykład działania konkatenacji

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