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

使用jOOQ like any、ignore case时遇函数调用错误,求解答

问题根源

你忽略了jOOQ likeIgnoreCase方法的参数约束:它只接受String或Field<String>类型参数,但any(projects.toTypedArray())返回的是量化谓词表达式(QuantifiedSelect类型),和方法要求的参数类型不匹配。

解决方法

要实现忽略大小写匹配任意项目名的需求,有两种实用方案:

方案1:用lower()配合like(any(...))实现

通过LOWER()函数统一字段和匹配值的大小写,再结合any量化谓词,生成简洁的SQL语句:

private fun Condition.andProjectIn(projects: Collection<String>): Condition = when {
    projects.isNotEmpty() -> {
        val lowerProjectField = FOO.PROJECT_NAME.lower()
        val lowerProjectValues = projects.map { DSL.lower(it) }.toTypedArray()
        this.and(lowerProjectField.like(any(lowerProjectValues)))
    }
    else -> this
}

方案2:OR组合多个likeIgnoreCase条件

如果项目数量较少,也可以将每个项目的匹配条件用OR拼接,效果和ANY一致:

private fun Condition.andProjectIn(projects: Collection<String>): Condition = when {
    projects.isNotEmpty() -> {
        val matchConditions = projects.map { FOO.PROJECT_NAME.likeIgnoreCase(it) }
        this.and(matchConditions.reduce { acc, cond -> acc.or(cond) })
    }
    else -> this
}
额外说明

jOOQ 3.12的量化谓词要求any()的参数是Field类型数组(不能直接传字符串数组),同时likeIgnoreCase并未直接支持量化谓词作为参数,因此需要通过lower()手动模拟忽略大小写的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:27:22