0

複数の基準に基づいてテーブルから行を選択する HQL クエリを作成しようとしています。名前苗字

問題は、空の値または null 値を無視するようにクエリを柔軟にする必要があることです。

それで

select t from table t where (:firstname = '' or t.firstName = :firstName) AND
(:lastName = '' OR t.lastName = :lastName)

私はこれがうまくいくと思っていただろうか?しかし、そうではありません-行が返されませんか? ここで何が間違っているのでしょうか?私はHQLに非常に慣れていないため、この質問があります。

4

4 に答える 4

2

私が正しく理解している場合は、ユーザーが firstName、lastName、またはその両方で検索できるようにする方法が必要です。したがって、渡されたパラメーターが空であるかどうかを確認してから、それを条件にしないでください。すべての空白のパラメーターを指定すると、テーブル全体が返されます。試す:

select t from table t 
where (:firstname IS NULL or t.firstName = :firstName) AND
(:lastName IS NULL OR t.lastName = :lastName)
于 2010-08-04T16:41:39.917 に答える
0

同様の要件がありました。動的にしたいのですが、HQLエディターを提供するだけのツールを使用しているため、Javaはありません。

以下のクエリでは、オプションのパラメーターを使用できます。基本的に一種の疑似準 XOR です。. . 本当の XOR があればいいのに :/

このクエリでは、NA が必要ない場合は空のままにするのではなく、NA を param に入れるだけです。

ええ、ええ、ええ。. . 醜いですが、機能し、純粋な HQL でオプションのパラメーターを必要とする他のシナリオに簡単に変更できます。

SELECT t AS table
FROM Table t
WHERE (t.valSet = :valSet 
    AND (:category= 'NA' AND :subCategory= 'NA'))
OR (:category != 'NA'
    AND (t.valSet = :valSet 
        AND t.category= :category))
OR (:subCategory != 'NA'
    AND (t.valSet = :valSet 
        AND t.subCategory = :subCategory )) 
于 2016-01-19T23:36:48.013 に答える
0

(:firstname = '' or t.firstName = :firstName)

あなたの基準は奇妙です。:firstname = '' であり、データベース内の名 (t.firstName) が等しい '' 場合、条件 t.firstName = :firstName は適切です ('' = '')

:firstname = '' は必要ありません

ただし、null 値を確認する場合は、次のようにする必要があります。

t.firstName IS NULL or t.firstName = :firstname
于 2010-08-04T09:38:31.887 に答える
0

firstname パラメーターを空の文字列に設定して、次の hql を実行するとどうなりますか?

select t from table t where (:firstname = '') 

次に、firstname パラメータを null に設定します。

select t from table t where (:firstname is null) 

上記のいずれかがテーブル全体を返す場合、HQLs の名前付きパラメーターは、あなたがしようとしていることをサポートしている可能性があります。

それ以外の場合は、null パラメーターの場合に別のクエリを使用する必要があります。これを行うには、クエリを動的に生成します。

于 2010-08-04T10:08:20.640 に答える