gpt4 book ai didi

postgresql - Spring数据原生查询不允许Postgres jsonb字符串存在操作符(问号)

转载 作者:行者123 更新时间:2023-11-29 12:41:02 27 4
gpt4 key购买 nike

我正在尝试在 SpringData native 查询中使用 Postgres jsonb 字符串存在运算符。

SpringData 方法示例:

@Query(value = "SELECT t.id \n"
+ " FROM task AS t \n"
+ " WHERE (t.worker_ids \\? :workerId)\n"
+ " ORDER BY t.created_at\n",
nativeQuery = true)
Optional<String> findMatchingTaskId(@Param("workerId") String workerId);

其中worker_ids是数据库中的JSOB类型。我试图用 \\ 排除问号,但仍然出现以下错误:org.postgresql.util.PSQLException:没有为参数 2 指定值。

有没有办法将此运算符与 spring 数据原生查询一起使用?

最佳答案

PostgreSQL 中的所有运算符都使用底层过程:

> SELECT oprname, oprcode FROM pg_operator WHERE oprname LIKE '%?%'

oprname | oprcode
--------------------------
? | jsonb_exists
?| | jsonb_exists_any
?& | jsonb_exists_all
...

因此您可以使用 jsonb_exists(jsonb, text) 重写您的查询,如下所示:

SELECT t.id
FROM task AS t
WHERE jsonb_exists(t.worker_ids, :workerId)
ORDER BY t.created_at

关于postgresql - Spring数据原生查询不允许Postgres jsonb字符串存在操作符(问号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50041594/

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