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

JOOQ通过DDLDatabase生成代码时如何保留PostgreSQL的JSONB类型?

解决JOOQ DDLDatabase生成代码时JSONB类型被转为JSON的问题

以下是可行的解决步骤:

  • 确保SQL脚本类型声明准确:检查你的建表SQL,所有需要JSONB的列必须明确写为jsonb,而非json或其他兼容类型。示例:

    CREATE TABLE example (
      id SERIAL PRIMARY KEY,
      data JSONB NOT NULL
    );
    
  • 为DDLDatabase指定PostgreSQL方言:JOOQ的DDLDatabase默认使用通用SQL方言,无法区分PostgreSQL特有的jsonb和标准json类型。你需要在代码生成配置中指定PostgreSQL方言,让它正确识别jsonb类型。以XML配置为例:

    <generator>
      <database>
        <name>org.jooq.meta.extensions.ddl.DDLDatabase</name>
        <properties>
          <property name="dialect" value="POSTGRES"/>
          <property name="scripts" value="path/to/your/schema.sql"/>
        </properties>
      </database>
    </generator>
    

    若使用Gradle或Maven插件,只需在对应配置中给DDLDatabase传递dialect=POSTGRES参数即可。

  • 强制类型映射(可选):若上述配置仍不生效,可通过forcedTypes强制将jsonb类型映射到JOOQ的JSONB类型。示例配置:

    <generator>
      <database>
        <name>org.jooq.meta.extensions.ddl.DDLDatabase</name>
        <properties>
          <property name="dialect" value="POSTGRES"/>
          <property name="scripts" value="path/to/your/schema.sql"/>
        </properties>
        <forcedTypes>
          <forcedType>
            <userType>org.jooq.JSONB</userType>
            <binding>org.jooq.impl.JSONBBinding</binding>
            <types>JSONB</types>
          </forcedType>
        </forcedTypes>
      </database>
    </generator>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:23:20