如何让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
相关产品推荐
相关产品推荐

