でNVLをシミュレートするために、どのように私はこれを試してみましたPAR1がnullではありません。HQL
select * from table where col1 = 'asdf'
が任意の行を返すしません。私のアプリケーションは、異なるデータベースエンジン
でNVLをシミュレートするために、どのように私はこれを試してみましたPAR1がnullではありません。HQL
select * from table where col1 = 'asdf'
が任意の行を返すしません。私のアプリケーションは、異なるデータベースエンジン
HQLでnvl
コマンドと等価で3210コマンドである上で実行することになっているので、
私はネイティブの文法を使用することはできません。 coalesce(a,b)
はa
がヌルでない場合はa
、それ以外の場合はb
を返します。
ですから、の行に何かしたいと思う:あなたの基礎となるデータベースがOracleの場合、あなたはNVL関数を使用することができます
from Table where col1 = coalesce(:par1, 'asdf')
を、私はそれを試してみましたが、それは私のために働きました。
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));
ご利用の場合は、切り抜いすることができ、データベースが他のデータベースのimplecationわからない、NVLであれば、私はOracleでのみ、このコードを使用しているとして、あなたは、あなたの要件ごとNVL関数を使用することができます。 お手伝いをしてください。
OPは、アプリケーションが異なるデータベース上で実行されなければならないと述べました。この場合、これは期待される答えではありません。 – KNP
私が実際に望んでいたのは: テーブルfrom col1 = coalesce(:par1、col1) どうもありがとう! –
coalesce()はANSI SQL関数でもあり、ほとんどのデータベースで動作するはずです。オラクル、ネイティブ。 – slu
また、jpaという名前のエンティティクエリではnvlでは機能しませんでしたが、coalesceで動作しました – shareef