gpt4 book ai didi

json - 如何在 jOOQ 的 WHERE 条件下使用 Postgres JSON 运算符?

转载 作者:行者123 更新时间:2023-11-29 11:29:40 30 4
gpt4 key购买 nike

我有一个 JSONB 列,其中包含字符串数组,例如:["foo", "bar"]

我想编写 jOOQ 等价于:

SELECT * FROM sometable WHERE somecolumn ?| <mylist>

...应该在何处绑定(bind)到字符串标签名称的 java 列表。

似乎没有对 ?| 的直接支持在 jOOQ 3.8 中。我看过在某种情况下绑定(bind)到原始 sql,但我不太确定语法;如果尝试使用 ? 会变得更糟与绑定(bind)表达式冲突的 postgres 运算符。

更新:3.8.3 的堆栈跟踪

我将其简化为最低限度的测试。使用 jOOQ 3.8.3 添加这样的条件时:

query.addConditions(DSL.condition("sometable.tags ?| array['sometag']"));

产生这样的堆栈跟踪:

Caused by: org.postgresql.util.PSQLException: No value specified for parameter 1.
at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:228)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:163)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:622)
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:472)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:465)
at org.jooq.tools.jdbc.DefaultPreparedStatement.execute(DefaultPreparedStatement.java:194)
at org.jooq.impl.AbstractResultQuery.execute(AbstractResultQuery.java:269)
at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:348)
... 36 more

最佳答案

jOOQ 解析 ?| 和类似运算符作为绑定(bind)变量的问题已在 jOOQ 3.8.3 中得到解决:https://github.com/jOOQ/jOOQ/issues/5307

JDBC 限制

注意,除了上面的,还有a JDBC limitation that I have documented in a separate question .在 jOOQ 中,您可以通过指定以下内容来解决此 JDBC 限制:

Settings settings = new Settings().withStatementType(StatementType.STATIC_STATEMENT);

另请参阅:http://www.jooq.org/doc/latest/manual/sql-execution/statement-type

或者,或者,回退到使用 jsonb_exists_any() 函数而不是 ?| 运算符。

关于json - 如何在 jOOQ 的 WHERE 条件下使用 Postgres JSON 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38340086/

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