我们有一个数据表,其中有一个基于函数的索引(数据库是 Oracle)。但是在我们的 Java EE ejb 应用程序中,系统使用 jpa 查询访问数据。
但是为了强制 oracle 使用基于函数的索引而不是进行全表扫描,我需要一种方法来告诉 jpa 容器生成带有在 sql 查询的 WHERE 子句中的索引中定义的函数的 sql。
据我所知,我们必须使用本机查询来在生成的查询中创建自定义项。但是为了使用本机查询,我们必须进行许多代码更改。任何人都可以建议解决此问题的任何其他解决方法吗?
索引:(我们需要对 Dev_Id + Dev_Type 强制执行唯一约束,但有时 Dev_Id 可以为空,而 Dev_Type 可以重复。)
(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';