jooq jsonArrayAgg 查询 mariadb/mysql 总是得到“你的 SQL 语法错误”异常

问题描述 投票:0回答:0

如果我的 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

allowMultiQueries = true

但他们都没有工作。 我怎样才能克服这个问题或找到解决方法?

java mariadb jooq
© www.soinside.com 2019 - 2024. All rights reserved.