HQL

2009-03-02 6 views
27

でNVLをシミュレートするために、どのように私はこれを試してみましたPAR1がnullではありません。HQL

select * from table where col1 = 'asdf' 

が任意の行を返すしません。私のアプリケーションは、異なるデータベースエンジン

答えて

58

HQLでnvlコマンドと等価で​​3210コマンドである上で実行することになっているので、

私はネイティブの文法を使用することはできません。 coalesce(a,b)aがヌルでない場合はa、それ以外の場合はbを返します。

ですから、の行に何かしたいと思う:あなたの基礎となるデータベースがOracleの場合、あなたはNVL関数を使用することができます

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

私が実際に望んでいたのは: テーブルfrom col1 = coalesce(:par1、col1) どうもありがとう! –

+2

coalesce()はANSI SQL関数でもあり、ほとんどのデータベースで動作するはずです。オラクル、ネイティブ。 – slu

+0

また、jpaという名前のエンティティクエリではnvlでは機能しませんでしたが、coalesceで動作しました – shareef

3

を、私はそれを試してみましたが、それは私のために働きました。

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関数を使用することができます。 お手伝いをしてください。

+1

OPは、アプリケーションが異なるデータベース上で実行されなければならないと述べました。この場合、これは期待される答えではありません。 – KNP