You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jOOQ 3.14+版本使用DDLDatabase生成代码报COALESCE函数不存在求助

你遇到的报错核心原因是jOOQ 3.14+版本对DDLDatabase的标识符解析逻辑做了调整,你配置里的defaultNameCase = lower会将所有未显式加引号的SQL标识符统一转为小写并包裹双引号,连COALESCE、SUM这类SQL内置函数名也会被误处理为普通标识符,转义后变成"coalesce",而H2数据库对双引号包裹的内容会严格按标识符匹配,自然找不到名为coalesce的自定义函数,就抛出了函数不存在的错误。

解决方案


方案1:指定SQL方言(最推荐)

在代码生成配置的database.properties块中添加方言配置,明确告知jOOQ你的迁移脚本是MySQL语法,避免内置函数被误转义:

property {
    key = 'dialect'
    value = 'MYSQL'
}

添加后jOOQ会按照MySQL的语法规则解析脚本,自动识别内置函数,不会将其作为普通标识符转义。

方案2:调整标识符大小写规则

如果你不需要强制将所有标识符转为小写,可以直接删除defaultNameCase = 'lower'这行配置,jOOQ就不会主动给未加引号的token加双引号,内置函数就能被H2正确识别。

方案3:临时兼容写法

如果不想调整全局配置,可以将SQL中用到的内置函数显式声明为关键字,或者将COALESCE替换为H2和MySQL都支持的IFNULL写法,也能临时解决问题,但是不推荐作为长期方案。

内容的提问来源于stack exchange,提问作者Axel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:06:05