我尝试从输入列表中获取在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.是否有其他方法来构建查询以获得相同的结果?
1条答案
按热度按时间wj8zmpe11#
我设法找到了一个解决方案来修复JPA中的查询。解决方案只是使用函数jsonb_exists_any()。查询如下所示: