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

JOOQ中实现空值条件映射至对象的可行性及语法报错问题求助

JOOQ中实现空值条件映射至对象的可行性及语法报错问题求助

当然可以实现这种空值条件下映射对象的需求啦!不过你的代码里有几个小细节没处理好,导致了SQL语法错误,我帮你捋一捋:

问题分析

  1. 类型不匹配:你在when分支返回的是value((Object) null),而otherwise分支返回的是row(...)构造的记录,两种返回值类型不一致,jOOQ生成SQL时会出现语法混乱。
  2. 语法冗余:row(PRE_PLEADING.ID, PRE_PLEADING.TITLE,)里最后多了一个逗号,这属于代码语法错误,会直接导致生成的SQL格式异常。
  3. 构造器匹配风险:使用mapping(ReceivedPleadingSummary::new)时,要确保ReceivedPleadingSummary的构造器参数顺序、类型和row里的字段完全对应,否则也可能出现隐式错误。

修正后的代码示例

context.select(
    // 空值分支返回与otherwise同类型的row,保证类型一致
    when(PRE_PLEADING.ID.isNull(), row(val((Integer) null), val((String) null)))
        .otherwise(row(PRE_PLEADING.ID, PRE_PLEADING.TITLE))
        .mapping(ReceivedPleadingSummary::new)
)
.from(...)

关键改动说明

  • 把value((Object) null)替换成row(val(null), val(null)),让两个分支返回相同类型的行记录,jOOQ就能正确生成合法的SQL了。
  • 去掉了row里多余的末尾逗号,修复语法错误。
  • 如果你的ReceivedPleadingSummary构造器是接收ID(Integer类型)和TITLE(String类型)的,这样的映射逻辑就完全匹配,不会有问题。

另外提个小建议:如果ReceivedPleadingSummary支持无参构造器+字段setter,也可以尝试用convertFrom方法实现映射,不过用构造器直接映射的方式更简洁高效。

备注:内容来源于stack exchange,提问作者Humphrey Dino Chica

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 06:13:00