2016-03-19 9 views
0

私はJPA(JPQL)を使い慣れていないので、柔軟な比較計画でWHERE句を維持するための良い解決策はありません。 私は次のようにフォームのJPQLステートメントを実装したいと思います:(comparison_operator_placeholder)は、ユーザの入力に基づいて、実行時に選択されなければならないJPQL比較演算子のプレースホルダ

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

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


直感的に私は、このような文法は存在しないことを認識していますが、各組み合わせに対してクエリを書く以外の方法があります。私は回避策を感謝します。

+0

"ワイルドカード"(通常は%、 '_'または多分' * ')のコンセプトを比較演算子と混在させることに注意してください。これは誤解を招き、他のプログラマーに誤解されるかもしれません。あなたが実際に探しているのは「ダイナミック」だと思います。 – MWiesner

+0

'WHERE'節で行いたい比較のタイプを決定するJavaコードロジックを表示できますか? –

+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-inentity-class-using-jpql-example – neal