質問
これを試しました:
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にのみ使用しているためです。 役に立てば幸いです。
所属していません StackOverflow