如何在JOOQ代码生成中排除指定表的特定列?
解决JOOQ代码生成时排除指定表特定列的Maven配置问题
我刚碰到过一模一样的坑!核心问题出在你写的正则表达式没转义点号,导致JOOQ没法精确匹配到users.type和users.mark这两个目标列。
问题根源
当你开启<includeExcludeColumns>true</includeExcludeColumns>后,JOOQ会把<excludes>的正则规则应用在**表名.列名**这个完整字符串上。而正则里的.是元字符,会匹配任意单个字符——你写的users.type实际会匹配usersXtype、users1type这类奇怪的组合,根本不会命中真正的users.type列,配置自然就不生效了。
正确配置方案
把正则里的点号转义成\.,就能精确匹配表和列的组合了。这里给你两种写法:
写法1:逐个指定列
<database> <name>org.jooq.meta.mysql.MySQLDatabase</name> <inputSchema>fishes</inputSchema> <includeExcludeColumns>true</includeExcludeColumns> <includes>.*</includes> <!-- 转义点号,精确匹配users表的type和mark列 --> <excludes>users\.type|users\.mark</excludes> </database>
写法2:分组简化(适合多列场景)
如果要排除的列比较多,用分组写法更简洁:
<excludes>users\.(type|mark)</excludes>
验证步骤
运行Maven代码生成命令:
mvn jooq-codegen:generate
然后去生成的代码里找UsersRecord类,检查里面是否已经没有type和mark字段,同时其他表的同名列(如果存在)应该还保留着,这就说明配置生效了。
之前你去掉users.前缀后生效,是因为正则type|mark会匹配所有包含type或mark的表名.列名字符串,自然就全局排除了这些列,这显然不是你想要的结果。
内容的提问来源于stack exchange,提问作者edbras
相关产品推荐
相关产品推荐

