2016-03-19 36 views
0

JPA (JPQL) için yeniyim, bu yüzden WHERE yan tümcesini esnek bir karşılaştırma planı ile sürdürmek için iyi bir çözüm bulunmadık. Ben formu gibi bir JPQL deyimi uygulamak istiyoruz:JPQL karşılaştırma operatörleri için yer tutucu

SELECT i FROM Item i 
    WHERE i.weight (comparison_operator_placeholder) :weight 
     AND i.height (comparison_operator_placeholder) :height; 

(comparison_operator_placeholder):{ = | < | > | <= | >= } 

(comparison_operator_placeholder) Kullanıcının girişe göre, çalışma sırasında seçilecektir.
Sezgisel olarak böyle bir dilbilgisi bulunmadığının farkındayım, ancak her kombinasyon için sorgu yazmaktan başka bir yol var. Herhangi bir geçici çözümü takdir edeceğim.

+0

Dikkat: Karşılaştırma operatörleri ile (belki '*' tipik '%', '_' ya) "joker" kavramını birarada. Bu, diğer programcılar tarafından yanıltıcı ve yanlış anlaşılmış olabilir. Aslında aradığın şey "dinamik", sanırım. – MWiesner

+0

Bize "WHERE" maddesinde yapmak istediğiniz karşılaştırma türünü belirleyen Java kod mantığını gösterebilir misiniz? –

+1

eksik "<>" btw –

cevap

1

Birden çok sorgu yazmanız gerekmez. Sadece şöyle operatör (ler) için bir değişken kullanın:

String query = "SELECT i FROM Item i \n" + 
       "WHERE i.weight " + operator + " :weight \n" + 
       "AND i.height " + operator2 + " :height"; 
+0

muhtemelen tanımında açık değildi. Çözümün iyi, ama '@AdedQuery' hakkında düşünüyordum. Bu yüzden, sizin gibi bir sorguyla bir varlığa açıklama eklemek istedim, ancak böyle bir durumda çalışmaz. – univarn

+1

Bu soruya bakın: http://stackoverflow.com/questions/22167730/dynamic-named-query-in-entity-class-using-jpql-example – neal