私はこれを試しました:
from Table where (:par1 is null or col1 = :par1)
しかし、それは起こります
from Table where :par1 is null
:par1がnullでない場合でも、常にテーブルのすべての行を返します。
ながら
select * from table where col1 = 'asdf'
行を返しません。
アプリケーションが別のデータベースエンジンで実行されることになっているため、ネイティブの文法を使用できません。
HQLのnvl
コマンドに相当するのがcoalesce
コマンドです。 a
がnullでない場合、coalesce(a,b)
は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でのみ使用したため、他のデータベースの実装については不明です。それが役に立てば幸い。