2017-07-05 12 views
0

"FULLNAME"というSQL文で複合派生属性を返しています。Where句とOrder Byの両方で派生した属性

select p.id, 
     nvl2(p.ID, upper(p.ATTR1) || ... decode(..) +) as fullname, // details omitted 
     // ... 
from 
    person_t p, ... 
where 
    lower(fullname) like '%abc%' 
order by 
    fullname asc; 

以前、我々はあなたが派生属性の@Formula注釈を付けることを可能にするにHibernateを使用していました。 HQLのカスタムフィールドを使用することができます。

しかし、私たちはJPAに移行しなければなりません。私はすべてのHibernate固有のものを削除する必要があります。これには、通常のSQLへの書き換えが必要です。

カスタムフィールドは、(1)Where句および(2)Order ByではプレーンSQLでは機能しません。簡単な解決法はありますか?

答えて

0

whereのエイリアスの使用はほとんどのデータベースで許可されていません。 by order byは通常許可されています。

だから、あなたはどこ

に例えば(別名に関連した)のコードを繰り返す必要があります。

select p.id, 
    nvl2(p.ID, upper(p.ATTR1) || ... decode(..) +) as fullname, // details omitted 
       // ... 
from person_t p, ... 
where lower(nvl2(p.ID, upper(p.ATTR1) || ... decode(..) +)) like '%abc%' 
order by fullname asc; 
関連する問題