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

JOOQ Codegen异常:同时配置表与列规则后所有列被排除

JOOQ Codegen 列排除异常问题解决

问题场景

在JOOQ Codegen配置中,通过<includes>指定了需生成POJO的多张表,同时在<excludes>中配置了这些表中不需要的列,但最终所有列都被排除。需求是仅为指定5张表生成POJO,且只保留这些表中的部分列。

原配置代码片段:

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
</dependencies>
<configuration>
    <jdbc>
        <driver>${spring.datasource.driver-class-name}</driver>
        <url>${spring.datasource.url}</url>
        <username>${spring.datasource.username}</username>
        <password>${spring.datasource.password}</password>
    </jdbc>
    <generator>
        <generate>
            <javaTimeTypes>true</javaTimeTypes>
        </generate>
        <database>
            <includes>cart
                | material_item
                | size_item
                | ACCOUNTSALESORG__C
                | SALESORG__C
                | CONTACT
                | USER
            </includes>
            <includeExcludeColumns>true</includeExcludeColumns>                                 
            <excludes>.*\.ACCOUNTSALESORG__C.CREATEDBYID
                | .*\.ACCOUNTSALESORG__C.LASTMODIFIEDBYID                                       
            </excludes>
            <schemata>
                <schema>
                    <inputSchema>business_new</inputSchema>
                </schema>
                <schema>
                    <inputSchema>orchestration_new</inputSchema>
                </schema>
            </schemata>
        </database>
        <target>
            <packageName>com.b2b.adidas.sfmc.search.db</packageName>
            <directory>src/main/java</directory>
        </target>
    </generator>
</configuration>

问题原因

  1. 正则表达式格式错误:<excludes>中的换行和空格会被正则引擎当作匹配字符的一部分,导致匹配逻辑异常,可能误排除所有列。
  2. 模糊匹配风险:.*\.ACCOUNTSALESORG__C的写法过于宽泛,可能匹配到非预期的表或列组合,引发意外排除。
  3. <includes>冗余:配置中包含了7张表,但需求是仅生成5张表,冗余的表定义可能干扰匹配逻辑。

解决方案

1. 精简<includes>,仅保留目标5张表

根据需求移除不需要的表(比如CONTACT、USER),确保只包含需要生成POJO的表:

<includes>cart|material_item|size_item|ACCOUNTSALESORG__C|SALESORG__C</includes>

(注意:将表达式写为一行,避免换行/空格干扰正则匹配)

2. 修正<excludes>的正则表达式

使用精准的正则匹配要排除的列,指定schema避免模糊匹配,同时去掉多余的换行和空格:

<excludes>^business_new\.ACCOUNTSALESORG__C\.(CREATEDBYID|LASTMODIFIEDBYID)$</excludes>
  • ^ 和 $ 确保完整匹配,避免部分匹配导致的误排除
  • 明确指定schema(business_new)和表名,匹配更精准
  • 用括号分组列名,简化表达式

3. 确保includeExcludeColumns的正确作用

该参数已设置为<includeExcludeColumns>true</includeExcludeColumns>,确保<includes>/<excludes>同时作用于表和列,无需修改。

修改后的核心配置片段

<database>
    <includes>cart|material_item|size_item|ACCOUNTSALESORG__C|SALESORG__C</includes>
    <includeExcludeColumns>true</includeExcludeColumns>                                 
    <excludes>^business_new\.ACCOUNTSALESORG__C\.(CREATEDBYID|LASTMODIFIEDBYID)$</excludes>
    <schemata>
        <schema>
            <inputSchema>business_new</inputSchema>
        </schema>
        <schema>
            <inputSchema>orchestration_new</inputSchema>
        </schema>
    </schemata>
</database>

验证方式

重新执行JOOQ Codegen插件,检查生成的POJO类:

  • 仅包含指定的5张表对应的类
  • ACCOUNTSALESORG__C类中已移除CREATEDBYID和LASTMODIFIEDBYID字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:57:02