2016-03-19 100 views
0

我是JPA(JPQL)的新手,因此我沒有很好的解決方案來堆棧,以便使用靈活的比較計劃來維護WHERE子句。 我想實現的形式就像一個JPQL語句:JPQL比較運算符的佔位符

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)應在運行時進行選擇,根據用戶的輸入。
直覺上我意識到不存在這樣的語法,但是,除了爲每個組合編寫查詢之外,應該有其他方式。我會感謝任何解決方法。

+0

注意:您比較運算的mixup 「通配符」(通常爲''%,'_'也許'*')的概念。這可能會讓其他程序員產生誤解和誤解。我猜,你實際上在尋找的是「動態的」。 – MWiesner

+0

您可以向我們展示Java代碼邏輯,它將確定您打算在WHERE條款中執行的比較類型嗎? –

+1

你缺少「<>」btw –

回答

1

您不必編寫多個查詢。只需使用一個變量的操作(一個或多個),像這樣:

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

可能我不是很清楚描述。你的解決方案很好,但我在考慮'@NamedQuery'。所以我想用像你這樣的查詢來註釋一個實體,但在這種情況下它不起作用。 – univarn

+1

看到這個問題:http://stackoverflow.com/questions/22167730/dynamic-named-query-in-entity-class-using-jpql-example – neal