関数ベースのインデックスを持つデータ テーブルがあります (データベースは Oracle)。しかし、Java EE ejb アプリケーションでは、システムは jpa クエリを使用してデータにアクセスします。
しかし、完全なテーブル スキャンを実行する代わりにオラクルに関数ベースのインデックスを使用させるには、sql クエリの WHERE 句のインデックスで定義された関数を使用して sql を生成するように jpa コンテナーに指示する方法が必要です。
私の知る限り、そのような生成されたクエリでカスタマイズを作成するには、ネイティブ クエリを使用する必要があります。しかし、ネイティブ クエリを使用するには、多くのコードを変更する必要があります。この問題を解決するための他の回避策を提案してもらえますか?
インデックス: (Dev_Id + Dev_Type に対して一意の制約を適用する必要がありましたが、Dev_Type が重複している場合でも、Dev_Id が null になることがあります。)
(NVL2(Dev_Id, Dev_Id, NULL), NVL2(Dev_Id, Dev_Type, NULL))
必要なクエリ: (インデックスを使用するため)
Select * from some_table where NVL2(Dev_Id, Dev_Id, NULL) = 'some_val';
コンテナ生成クエリ:
Select * from some_table where Dev_Id = 'some_val';