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

如何让jOOQ将DECIMAL类型生成为Double而非BigDecimal?

解决jOOQ将DECIMAL字段映射为Double的配置问题

你的配置未生效的核心原因是ForcedType的参数使用错误,以下是修正后的配置和说明:

错误原因分析

你之前用.withName("DOUBLE")指定的是数据库类型名称,但jOOQ需要明确指定Java目标类型才能生成对应代码;同时.withTypes("DECIMAL")无法匹配带精度/标度的DECIMAL(5,2)、DECIMAL(3,2)这类具体类型,导致规则不生效。

修正后的配置

如果是Gradle Kotlin DSL环境,正确配置如下:

.withInputSchema("public")
.withForcedTypes(listOf(ForcedType()
    .withJavaType("java.lang.Double") // 指定生成的Java类型为Double
    .withExpression(".*") // 匹配所有字段(若仅需特定字段,可改为"price|servings")
    .withTypes("DECIMAL\\(.*\\)") // 正则匹配所有带精度的DECIMAL类型
))

关键参数说明

  • withJavaType:必须指定Java类型的全限定名,这里用java.lang.Double告诉jOOQ生成Double类型的字段。
  • withTypes:用正则DECIMAL\\(.*\\)匹配所有带括号的DECIMAL类型,确保能命中你的DECIMAL(5,2)和DECIMAL(3,2)字段。
  • withExpression:若只需要修改price和servings两个字段,把.*改成price|servings即可,避免影响其他DECIMAL字段。

注意:Double属于浮点类型,会存在精度丢失风险,仅在业务场景允许精度损失时使用此配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:25:00