【发布时间】:2022-11-30 18:46:18
【问题描述】:
在我的 Oracle 数据库表中我的表我有专栏列x使用 JSON-Arrays (VARCHAR2),我想找到值所在的所有条目值X在那个数组里面。
在本机 Oracle-SQL 中,以下查询运行良好:
SELECT * FROM mytable t WHERE JSON_EXISTS(columnx, '$?(@ == "valueX")');
在我的 Spring Boot 应用程序中,我用 JPQL 编写查询,所以我必须转换它。
以下查询不成功:
-
我发现我必须对特定的 SQL-Oracle 函数使用“FUNCTION()”:
@Query(value = "SELECT t FROM mytable t WHERE FUNCTION('JSON_EXISTS',t.columnx, '$?(@ == \"valueX\")')")这会导致 JPQL-Parsing-Error: "QuerySyntaxException: unexpected AST node: function (JSON_EXISTS)" -
我发现 JPQL 需要一个真正的布尔比较,所以我尝试了这个:
@Query(value = "SELECT t FROM mytable t WHERE FUNCTION('JSON_EXISTS',t.columnx, '$?(@ == \"valueX\")') = TRUE")现在 JPQL-Converter 可以成功地将它解析为本机 SQL,但是我在执行查询时遇到了 Oracle-Error:“ORA-00933:SQL 命令未正确结束。” 这是可以理解的,因为解析后的原生... WHERE JSON_EXISTS(columnx, '$?(@ == "valueX")') = 1也不会运行。解决这个问题的正确方法是什么?你有什么主意吗?
【问题讨论】:
标签: sql spring oracle jpa jpql