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

如何使用@Entity类名与属性名生成jOOQ对应的类和属性

实现方法

完全可以实现,核心是自定义jOOQ代码生成的命名策略,替换默认读取JPA注解name属性的逻辑即可。

操作步骤

  • 编写自定义命名策略类,继承jOOQ默认的DefaultGeneratorStrategy,重写表、列命名的生成逻辑:
    public class JpaConsistentNamingStrategy extends DefaultGeneratorStrategy {
    
        // 自定义表对应的Java类名:直接用@Entity对应的类简单名称
        @Override
        public String getJavaClassName(Definition definition, Mode mode) {
            if (definition instanceof TableDefinition tableDef) {
                // 从Hibernate元数据中获取对应实体类的simpleName返回即可,不需要读取@Table(name)或@Entity(name)的值
                return getEntityClassFromTableDef(tableDef).getSimpleName();
            }
            return super.getJavaClassName(definition, mode);
        }
    
        // 自定义列对应的Java标识符:直接用实体类的字段变量名
        @Override
        public String getJavaIdentifier(Definition definition) {
            if (definition instanceof ColumnDefinition colDef) {
                // 从Hibernate元数据中获取对应字段的变量名返回即可,不需要读取@Column(name)的值
                return getEntityFieldFromColDef(colDef).getName();
            }
            return super.getJavaIdentifier(definition);
        }
    
        // 自行实现从TableDefinition/ColumnDefinition映射对应JPA实体类、字段的逻辑,可通过Hibernate元数据API直接查询
        private Class<?> getEntityClassFromTableDef(TableDefinition tableDef) {
            // 你的实现逻辑
        }
    
        private Field getEntityFieldFromColDef(ColumnDefinition colDef) {
            // 你的实现逻辑
        }
    }
    
  • 在jooq-codegen-maven插件配置中注册自定义命名策略,原有其他配置保持不变:
    <plugin>
        <groupId>org.jooq</groupId>
        <artifactId>jooq-codegen-maven</artifactId>
        <version>你的jOOQ版本</version>
        <configuration>
            <generator>
                <!-- 注册自定义命名策略 -->
                <strategy>
                    <name>com.你的包路径.JpaConsistentNamingStrategy</name>
                </strategy>
                <!-- 你原本的数据库、meta hibernate等其他配置保持不变 -->
            </generator>
        </configuration>
    </plugin>
    

补充说明

该配置只会修改jOOQ生成的Java类的命名,运行时生成SQL仍会自动使用@Entity、@Column中配置的真实数据库表名、列名,不会影响SQL执行正确性。你后续用jOOQ写查询时就能直接用和JPA实体完全一致的命名,不需要再对应数据库命名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:06:03