spring 无法解析JPA中的jsonb运算符

juud5qan  于 2022-12-10  发布在  Spring
关注(0)|答案(1)|浏览(209)

我尝试从输入列表中获取在jsonb数组字段中至少有一个匹配元素的行。table_a的jsobb_column是一个jsonb字段,它以数组的形式存储值。
以下sql查询工作正常:

SELECT *
FROM table_a
where table_a.jsobb_column ?| array['item1', 'item2'];

JPA查询如下所示:

"select distinct table_a.* FROM table_a where table_a.jsonb_column ?| array[?0] "

由于JPA无法解析语法“?|“用于jsonb运算符,则会引发错误:

nested exception is java.lang.IllegalArgumentException: Mixing of ? parameters and other forms like ?0 is not supported!

我尝试了两种不同的方法来解决这个问题:
1.使用“ESCAPE”对“?”字符进行转义,但未按预期工作。
1.将查询的一部分作为字符串参数传输。JPA查询如下所示:

"select distinct table_a.* FROM table_a where table_a.jsonb_column ?0 "

其中,位置0处的参数是具有以下值的字符串变量:“?|数组['项目1','项目2']”
在这种情况下,我会收到以下错误:

Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "$0"

数据库:postgresql
问题:
1.“怎么逃了?|“运算符,以便执行查询?
1.是否有其他方法来构建查询以获得相同的结果?

wj8zmpe1

wj8zmpe11#

我设法找到了一个解决方案来修复JPA中的查询。解决方案只是使用函数jsonb_exists_any()。查询如下所示:

"select distinct table_a.* FROM table_a where jsonb_exists_any(table_a.jsonb_column, array[?0]) = true "

相关问题