如果我的 SQL 语句有 jsonArrayAgg 命令,jOOQ 总是会报错:
“您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,了解要使用的正确语法”。
然而,当我在 MariaDB 中打开“general_log”并复制/发布 jooq 生成 SQL 语句来查询数据库时,一切都很好,结果就是我想要的。
我的代码就像
list = ctx.select(
MAIN.KEYID,
field(
select(jsonArrayAgg(
jsonObject(
key("id").value(CONNECTOR.ID),
key("standard").value(CONNECTOR.STANDARD)
))).from(CONNECTOR)
.where(CONNECTOR.MAINKEYID.eq(MAIN.KEYID))).as("connectors")
).from(MAIN)
.fetchInto(JSON_POJO.class);
jooq 日志
at org.jooq_3.15.12.MARIADB.debug(Unknown Source) ~[?:?]
at org.jooq.impl.Tools.translate(Tools.java:2997) ~[jooq-3.15.12.jar:?]
at org.jooq.impl.DefaultExecuteContext.sqlException(DefaultExecuteContext.java:639) ~[jooq-3.15.12.jar:?]
at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:354) ~[jooq-3.15.12.jar:?]
at org.jooq.impl.AbstractResultQuery.fetchLazy(AbstractResultQuery.java:295) ~[jooq-3.15.12.jar:?]
at org.jooq.impl.AbstractResultQuery.fetchLazyNonAutoClosing(AbstractResultQuery.java:316) ~[jooq-3.15.12.jar:?]
at org.jooq.impl.SelectImpl.fetchLazyNonAutoClosing(SelectImpl.java:2866) ~[jooq-3.15.12.jar:?]
at org.jooq.impl.ResultQueryTrait.collect(ResultQueryTrait.java:357) ~[jooq-3.15.12.jar:?]
at org.jooq.impl.ResultQueryTrait.fetchInto(ResultQueryTrait.java:1423) ~[jooq-3.15.12.jar:?]
jooq 像这样简单地生成 sql 代码
set @t = @@group_concat_max_len; set @@group_concat_max_len = 4294967295;
select `mydb`.`main`.`keyid`,
(select json_merge_preserve('[]', concat('[', group_concat(json_merge_preserve('{}', json_object('id', `mydb`.`Connector`.`id`), json_object('standard', `mydb`.`Connector`.`standard`)) separator ','), ']'))
from `mydb`.`Connector` where `mydb`.`Connector`.`mainKeyid` = `mydb`.`main`.`keyid`) as `connectors` from `mydb`.`main`;
set @@group_concat_max_len = @t
我试过 jooq 3.12 ~ 3.16 版本,
MariaDB 10.3 并升级到 10.11,
Java 11.0.18
但他们都没有工作。 我怎样才能克服这个问题或找到解决方法?