2011-06-18 8 views
0

MySQL 5.1データベースのJPA名前付きクエリのwhere節に条件を指定するにはどうすればよいでしょうか?パラメータとしてnullを使用できますか?パラメータとしてnullable属性を持つJPA名前付きクエリのwhere節のMySQL条件

例:この表には、NULL可能なattribute_1とNULL可能ではないattribute_2が含まれています。内容は次のとおり

 
    id attribute_1 attribute_2 
    -- ----------- ----------- 
    1  {null}   123 
    2  X    456 

クエリ結果はレコード1でなければならない場合:PARAM_1 = NULL AND:PARAM_2 = "123"

クエリ結果があれば、レコード2であるべきである:PARAM_1は= "X" AND: PARAM_2 = "456"

クエリが結果を持っていない必要がある場合例:PARAM_1 = "X" AND:PARAM_2 = "123"

ありがとう!あなたの最初の行の

+0

難解な質問 – K6t

答えて

1

ネイティブクエリを使用して問題を解決しました。私はそれをJP-QLクエリで動作させることはできません。 I(ω1、パラメータのプレースホルダである)where句状態

AND IF(?1 IS NULL, b.attribute_1 IS NULL, b.attribute_1 = ?1) 

を用います。

0

は、あなたのクエリでwhere句を変更する必要があります。

where attribute_1 is null 

=を使用して、代わりに何行を得ないだろう、a = nullは常にnullからです。

+0

それは簡単ではありません。名前付きクエリでは、where句は、たとえばWHERE table.attribute_1 =:param_1およびtable.attribute_2 =:param_2'のようになります。問題は、param_1がJavaのnull値である可能性があることです。 – prockel

+0

うん、私は多くを考え出した。しかし、これを回避する方法はありません。 ':param_1'がnullの場合、' attribute_1 is null'を渡します。それ以外の場合は 'attribute_1 =:param_1'を渡します。異なるステートメント。 /と2つを ':param_1'の条件と組み合わせることもできますが、そのようにすると、文が準備されているとクエリプランが損なわれます。 –

+0

あなたが何を意味するのか分かりません。 'attribute_1 is null'のような文字列を渡すことはできません。 idは問題を解決しません。なぜなら、queryは 'attribute_1がヌル'で、 'attribute_1 = param_1'が正しく埋められるように定式化できないからです。私は別の方法で問題を解決しました。次の答えを見てください。 – prockel