質問

これを試しました:

from Table where (:par1 is null or col1 = :par1)

しかし、それは起こります

from Table where :par1 is null

:par1がnullでなくても、常にテーブルのすべての行を返します。

while

 select * from table where col1 = 'asdf'

行を返しません。

アプリケーションは異なるデータベースエンジンで実行されることになっているため、ネイティブグラマーを使用できません

役に立ちましたか?

解決

HQLの nvl コマンドに相当するのは、 coalesce コマンドです。 coalesce(a、b)は、 a がnullでない場合は a を返し、そうでない場合は b を返します。

したがって、次の行に何かが必要になります:

from Table where col1 = coalesce(:par1, 'asdf')

他のヒント

基礎となるデータベースがOracleの場合、nvl関数を使用できます。試してみたところ、うまくいきました。

Query query = session.createQuery(
                    " select ft from FeatureToggle ft left outer join ft.featureToggleCustomerMap "
                    + " ftcm where nvl(ftcm.custId,:custId) = :custId");

query.setParameter("custId", Long.valueOf(custId));

あなたのユースケースは異なる場合があり、データベースがnvlである場合は要件に従ってnvl関数を使用できます。他のデータベースの実装についてはわかりません。このコードはOracleにのみ使用しているためです。 役に立てば幸いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top