如何重命名生成的表引用?解决多Schema同名表代码命名冲突
解决JOOQ多Schema同名表的表引用命名冲突问题
要处理tables.references.Tables.kt里的表静态引用命名,你需要重写DefaultGeneratorStrategy的getJavaIdentifier方法——这个方法专门负责生成数据库对象(表、字段等)对应的Kotlin/Java标识符,也就是Tables文件里那些静态变量的名字。
具体实现步骤:
重写
getJavaIdentifier方法,针对表对象拼接Schema前缀:@Override public String getJavaIdentifier(Definition definition) { if (definition instanceof TableDefinition) { TableDefinition table = (TableDefinition) definition; // 用下划线拼接Schema名和原表名,避免命名冲突,比如schema1_user return table.getSchema().getName() + "_" + super.getJavaIdentifier(definition); } // 字段等其他对象沿用默认生成逻辑即可 return super.getJavaIdentifier(definition); }如果你用Kotlin编写生成策略,写法逻辑一致,只需调整语法。
补充说明:JOOQ生成策略里的核心方法分工:
getJavaClassName:控制实体类、表实现类的类名(就是你已经重写的那个)getJavaIdentifier:控制Tables/Records文件里的静态变量名(解决你当前问题的关键)getTableName:控制生成代码中映射的数据库表名(一般无需修改)
重新生成代码后,Tables.kt里的表引用就会变成类似val SCHEMA1_USER = TableImpl(...)的命名,和你添加前缀后的类名对应,彻底避免多Schema同名表的命名冲突。
内容的提问来源于stack exchange,提问作者Tobias Marschall
相关产品推荐
相关产品推荐

