Soru JPA concat operatörü


Dize birleştirme için bir JPA concat operatörü var mı?

JPA olduğunu biliyorum. CONCAT işlevi, ancak birden çok dizeleri birleştirmek için kullanmak için çirkin.

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

Oracle teklifi gibi satıcılar || Microsoft gibi başka teklifler +. Gibi bir sorgu oluşturabilmem için standart bir JPA birleştirme işleci var mı

cola || colb || colc || cold

denedim + SQL Server ile openjpa kullanarak, ancak geçersiz JPQL gibi görünüyor. Böyle bir operatörle ilgili hiçbir şey bulamadım. oracle referansı.


25
2017-12-14 12:28


Menşei




Cevaplar:


CONCAT işlev genişletildi JPA 2.0 Belirtimin bölüm 4.6.17.2.1'den (String Fonksiyonları), 2'den fazla parametrenin geçirilmesine izin vermek için:

CONCAT(string_primary, string_primary {, string_primary}* )

JPA 1'de bu tam olarak iki parametreyle sınırlandırılmıştır.


39
2017-12-14 12:57



Hmm. Garip. download.oracle.com/otn-pub/jcp/... Bu işlevi açıkladığınız gibi listeler. Openjpa 2.1.1, JPA 2.0 olmalıdır. - Udo Held
OpenJpa 2 bu sözdizimini desteklemeli, tam sorguyu ve aldığınız istisnayı yayınlayabilir misiniz? - Jörn Horstmann


Birden çok dizge için JPA Concat işlevini kullanabilirsiniz.

Örneğin:

CONCAT(cola, colb, colc, cold)

8
2017-12-14 12:43



Bunu kontrol ettim. Openjpa ile bir istisna alıyorum. Bağlı olduğum referans (docs.oracle.com/cd/E16764_01/apirefs.1111/e13946/...) sadece iki argüman gösterir. - Udo Held


Ayrıca kullanabilirsiniz || bir birleşik operatör olarak, bkz. belgelere

HQL desteklemeye ek olarak bir birleştirme işleci tanımlar   birleştirme (CONCAT) işlevi. Bu JPQL tarafından tanımlanmadı, bu yüzden   Taşınabilir uygulamalar kullanmamalı. Birleştirme operatörü   SQL birleştirme işlecinden alındı ​​- ||.

Örnek 11.19. Birleştirme işlemi örneği

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

6
2017-10-20 03:15