2013-02-27 12 views
5

私はパラメータとしてListを取るJPQL名前付きクエリを持っています。JPAで空のリストを渡してテストすることはできますか?

...WHERE x.id IN :list 

私は、次のような何かをしたいのですが、構文は明らかに私をさせません:

...WHERE :list IS EMPTY OR x.id IN :list 

どちらの意志:

私は IN句にパラメータを使用しています
...WHERE SIZE(:list) = 0 OR x.id IN :list 

JPA 2.0という名前のクエリでは、私がやろうとしていることはありえませんか?私は基準APIを介してやるか、単純な古いJPQL文字列を使用する方法を知っています。

答えて

-2

クエリで実行しようとしていることは意味がないようです。パラメーターの状態を使用して照会結果を制限しようとしています。しかし、あなたはこのパラメータを選択したものと比較しません。

このクエリ(それは意味をなさない)について考える:リスト二つの異なるクエリの間で選択する前に、空である:

:listがないのであれば、私はあなたがいるかどうかを確認する必要があると思う

SELECT * FROM SOMETABLE WHERE :list IS EMPTY 

空:...WHERE x.id IN :list

:listが空の場合:(NO WHERE CLAUSE AT ALL)

+0

あなたはもちろんのかなり正しいです。私はその条件をコード内でクエリ自体に移すことを望んでいましたが、これはJPQL BNFではサポートされていません。 –

+2

私は弱い防衛の中で、生成されたシナリオでは、次のような種類のSQL(JPQLではない)がよく見られるでしょう: 'SELECT x FROM y WHERE 1 = 1;'(WHERE節を組み立てているものは、 '1 = 1'は' WHERE'節にありますので、動的アセンブリは、あなたが話しているif/thenロジックのようなものを行う必要はありません)。言いましたが、私はこれをJPQLで取り除くことはできないと思います。ありがとう。 –

関連する問題