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

使用Jooq 3.15.12处理JSON类型时触发NullPointerException

jOOQ 3.15.12生成代码时因MySQL JSON字段触发NullPointerException

使用jOOQ 3.15.12针对MySQL数据库生成代码时,处理包含JSON类型字段的表REGEX时触发NullPointerException,错误发生在表关联关系获取环节。将JSON字段改为其他类型(如TEXT)后,代码生成可正常完成。

错误堆栈信息

Error while generating table ArmourDb.REGEX
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException
        at org.jooq.meta.AbstractDatabase.onError(AbstractDatabase.java:3104)
        at org.jooq.meta.AbstractDatabase.getRelations(AbstractDatabase.java:2317)
        at org.jooq.meta.DefaultColumnDefinition.getPrimaryKey(DefaultColumnDefinition.java:100)
        at org.jooq.meta.AbstractTableDefinition.getPrimaryKey(AbstractTableDefinition.java:91)
        at org.jooq.codegen.JavaGenerator.generateTable(JavaGenerator.java:5019)
        at org.jooq.codegen.JavaGenerator.generateTables(JavaGenerator.java:5000)
        at org.jooq.codegen.JavaGenerator.generate(JavaGenerator.java:582)
        at org.jooq.codegen.JavaGenerator.generate(JavaGenerator.java:537)
        at org.jooq.codegen.JavaGenerator.generate(JavaGenerator.java:436)
        at org.jooq.codegen.GenerationTool.run0(GenerationTool.java:879)
        at org.jooq.codegen.GenerationTool.run(GenerationTool.java:233)
        at org.jooq.codegen.GenerationTool.generate(GenerationTool.java:228)
        at com.linkedin.gradle.mysql.tasks.MySQLJooqCodegenTask.taskAction(MySQLJooqCodegenTask.java:32)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

涉事MySQL表结构

CREATE TABLE REGEX (
   ID BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
   WORD VARCHAR(4000) NOT NULL,
   DESCRIPTION VARCHAR(1000),
   TRAITS JSON,
   MODIFIED_BY VARCHAR(255) NOT NULL,
   MODIFIED_AT TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   CREATED_AT TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE = InnoDB;

解决方案

  • 升级jOOQ版本:jOOQ 3.15.12存在MySQL JSON字段元数据解析的bug,升级到3.16及以上版本可修复该问题。后续版本对MySQL JSON类型的处理逻辑进行了优化,避免了关联关系获取时的NPE。
  • 临时规避方案:若暂时无法升级版本,可先将JSON类型字段改为TEXT类型,完成代码生成后再改回JSON类型。需注意此方式仅为临时手段,长期使用可能引发类型不一致问题。
  • 确认方言配置:检查jOOQ代码生成配置,确保已正确指定MySQL数据库方言,示例配置片段:
    <generator>
      <database>
        <name>org.jooq.meta.mysql.MySQLDatabase</name>
        <!-- 其他数据库配置 -->
      </database>
    </generator>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:35:51