2013-02-27 17 views
5

Parametre olarak bir List alır bir JPQL adlı sorgu var. Bir IN ifadesinde parametresini kullanıyorum:JPA'da boş bir listeyi geçmek ve test etmek mümkün mü?

...WHERE :list IS EMPTY OR x.id IN :list 

Ne de:

...WHERE x.id IN :list 

Aşağıdaki ama sözdizimi görünüşte bana izin vermiyor böyle bir şey yapmak istiyorum

...WHERE SIZE(:list) = 0 OR x.id IN :list 

JPA 2.0 adlı bir sorguda imkansızı yapmaya çalıştığım şey nedir? Bunu, API ölçütleriyle veya düz eski JPQL dizeleriyle nasıl yapacağını biliyorum.

cevap

-2

Sorguda yapmaya çalıştığınız şey mantıksız görünüyor. Sorgu sonuçlarını bir parametrenin durumunu kullanarak sınırlamaya çalışıyorsunuz. Ancak, bu parametreyi seçtiğiniz öğeyle karşılaştırmazsınız.

(hiçbir mantıklı) Bu sorgu düşünün: :list değilse

: İki farklı sorgular arasındaki seçmeden önce liste boşsa:

SELECT * FROM SOMETABLE WHERE :list IS EMPTY 

Bu yüzden eğer kontrol etmek gerek boş: ...WHERE x.id IN :list

:list eğer boş: (NO WHERE CLAUSE AT ALL)

+0

Sen pek doğru tabii konum. Bu koşullu kod içinde sorgunun kendisine geçmeyi umuyordum, ancak bu JPQL BNF tarafından desteklenmiyor. –

+2

Zayıf savunmamda, oluşturulan senaryolarda aşağıdaki türde bir SQL (JPQL değil) sıklığının görülebileceğini teklif ediyorum: 'SELECT x FROM y WHERE 1 = 1;' (yani, WHERE ifadesinin montajı ne olursa olsun, bazen '1 = 1',' WHERE' deyimindedir, dolayısıyla dinamik derleme, konuştuğunuzda/sonra mantığını yapmak zorunda değildir). Bunu söyledikten sonra, JPQL ile bundan kurtulabileceğimi sanmıyorum. Teşekkürler. –

İlgili konular