gpt4 book ai didi

java - Oracle:如何在容器生成的 jpa 查询 WHERE 子句中使用基于函数的索引

转载 作者:行者123 更新时间:2023-11-30 04:37:23 24 4
gpt4 key购买 nike

我们有一个数据表,其中有一个基于函数的索引(数据库是 Oracle)。但在我们的 Java EE ejb 应用程序中,系统使用 jpa 查询来访问数据。

但是为了强制oracle使用基于函数的索引而不是进行全表扫描,我需要一种方法来告诉jpa容器使用WHERE子句中索引中定义的函数生成sql SQL查询。

据我所知,我们必须使用 native 查询在生成的查询中创建自定义项。但为了使用 native 查询,我们必须进行许多代码更改。有人可以建议任何其他解决方法来解决此问题吗?

索引:(我们需要对 Dev_Id + Dev_Type 强制执行唯一约束,但有时 Dev_Id 可以为 null,而 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';

最佳答案

也许创建一个 View 并让 JPA 遍历它是一种选择?

 CREATE VIEW SOME_VIEW AS SELECT SOME_TABLE.*,  
NVL2(Dev_Id, Dev_Id, NULL) AS NVL_DEV_ID FROM SOME_TABLE;


SELECT * FROM SOME_VIEW WHERE NVL_DEV_ID = ?

或者表上计算函数值的虚拟列?

关于java - Oracle:如何在容器生成的 jpa 查询 WHERE 子句中使用基于函数的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com