2011-12-14 32 views
20

Có một toán tử concat JPA cho chuỗi nối không?Nhà điều hành concat JPA

Tôi biết có chức năng JPA CONCAT, tuy nhiên nó rất xấu để sử dụng để ghép nối nhiều chuỗi.

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

nhà cung cấp như Oracle đề nghị || một số khác như Microsoft cung cấp +. Có một nhà điều hành JPA nối tiêu chuẩn để tôi có thể tạo ra một truy vấn như

cola || colb || colc || cold 

tôi đã cố gắng sử dụng + OpenJPA với SQL Server, tuy nhiên nó có vẻ là JPQL không hợp lệ. Tôi không thể tìm thấy bất cứ điều gì liên quan đến một nhà điều hành như vậy trong một oracle reference.

Trả lời

33

Chức năng CONCAT đã được mở rộng trong JPA 2,0 cho phép đi qua hơn 2 thông số, từ phần 4.6.17.2.1 (Chức năng String) của đặc tả:

CONCAT(string_primary, string_primary {, string_primary}*) 

Trong JPA 1, điều này bị hạn chế chính xác hai tham số.

+0

Hmm. Lạ thật. http://download.oracle.com/otn-pub/jcp/persistence-2.0-fr-eval-oth-JSpec/persistence-2_0-final-spec.pdf liệt kê chức năng này như bạn đã mô tả nó. Openjpa 2.1.1 phải là JPA 2.0. –

+1

OpenJpa 2 nên hỗ trợ cú pháp này, bạn có thể đăng truy vấn chính xác và ngoại lệ bạn đang nhận không? –

7

Bạn có thể sử dụng chức năng JPA Concat cho nhiều chuỗi.

Ví dụ:

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

Đã kiểm tra điều đó. Tôi nhận được một ngoại lệ với openjpa. Tham chiếu tôi đã liên kết (http://docs.oracle.com/cd/E16764_01/apirefs.1111/e13946/ejb3_langref.html#ejb3_langref_string_fun) cũng chỉ hiển thị hai đối số. –

6

Bạn cũng có thể sử dụng || như một nhà điều hành tiếp nhau, xem on the documentation

HQL định nghĩa một toán tử nối ngoài việc hỗ trợ các nối chức năng (CONCAT). Điều này không được xác định bởi JPQL, do đó, các ứng dụng di động nên tránh sử dụng nó. Toán tử ghép nối được lấy từ toán tử ghép nối SQL - ||.

Ví dụ 11.19. Ví dụ về hoạt động ghép nối

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