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

使用jOOQ Codegen从依赖JPA实体生成类失败:无实体添加

问题:jOOQ Codegen无法基于XML映射的JPA实体生成代码

我尝试用jOOQ Codegen插件,基于依赖中的JPA实体类生成代码。这些实体类未使用注解,而是通过另一依赖中的XML映射文件(*entity.hbm.xml)配置。我已在项目的persistence.xml中定义持久化单元,列出映射文件相对路径,且Maven模块已引入相关依赖,但插件生成失败,抛出以下警告:

[WARNING] No entities added : No entities were added to the MetadataSources
This can have several reasons, including:

  • The packages you've listed do not exist (org.n52.series.db.beans.DataEntity,
    org.n52.series.db.beans.PlatformEntity,
    org.n52.series.db.beans.ProcedureEntity,
    org.n52.series.db.beans.PhenomenonEntity,
    org.n52.series.db.beans.DatasetEntity,
    org.n52.series.db.beans.FeatureEntity,
    org.n52.series.db.beans.sta.HistoricalLocationEntity,
    org.n52.series.db.beans.sta.LocationEntity,
    org.n52.series.db.beans.UnitEntity,
    org.n52.series.db.beans.FormatEntity,
    org.n52.series.db.beans.parameter.dataset,
    org.n52.series.db.beans.parameter.procedure,
    org.n52.series.db.beans.parameter.platform,
    org.n52.series.db.beans.parameter.observation,
    org.n52.series.db.beans.parameter.feature,
    org.n52.series.db.beans.parameter.location,
    org.n52.series.db.beans.parameter.phenomenon)
  • The entities in the listed packages are not on the JPADatabase classpath (you must compile them before running jOOQ's codegen...)

我的pom.xml中build插件配置如下:

<build>
        <plugins>
            <plugin>
                <groupId>dev.aspectj</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.13.1</version>
                <configuration>
                    <complianceLevel>17</complianceLevel>
                    <aspectLibraries>
                        <aspectLibrary>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-aspects</artifactId>
                        </aspectLibrary>
                    </aspectLibraries>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jooq</groupId>
                <artifactId>jooq-codegen-maven</artifactId>
                <version>3.19.10</version>
                <executions>
                    <execution>
                        <id>generate-h2-jpa</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <generator>
                        <database>
                            <name>org.jooq.meta.extensions.jpa.JPADatabase</name>
                            <properties>
                                <property>
                                    <key>persistenceUnitName</key>
                                    <value>default-unit</value>
                                </property>
                                <property>
                                    <key>packages</key>
                                    <value>
                                        org.n52.series.db.beans.DataEntity,
                                        org.n52.series.db.beans.PlatformEntity,
                                        org.n52.series.db.beans.ProcedureEntity,
                                        org.n52.series.db.beans.PhenomenonEntity,
                                        org.n52.series.db.beans.DatasetEntity,
                                        org.n52.series.db.beans.FeatureEntity,
                                        org.n52.series.db.beans.sta.HistoricalLocationEntity,
                                        org.n52.series.db.beans.sta.LocationEntity,
                                        org.n52.series.db.beans.UnitEntity,
                                        org.n52.series.db.beans.FormatEntity,
                                        org.n52.series.db.beans.parameter.dataset,
                                        org.n52.series.db.beans.parameter.procedure,
                                        org.n52.series.db.beans.parameter.platform,
                                        org.n52.series.db.beans.parameter.observation,
                                        org.n52.series.db.beans.parameter.feature,
                                        org.n52.series.db.beans.parameter.location,
                                        org.n52.series.db.beans.parameter.phenomenon
                                    </value>
                                </property>
                            </properties>
                        </database>
                        <target>
                            <packageName>package org.n52.sta.data.cloudnative.schema</packageName>
                            <directory>src/main/java</directory>
                        </target>
                    </generator>
                </configuration>

                <dependencies>
                    <dependency>
                        <groupId>org.jooq</groupId>
                        <artifactId>jooq-meta-extensions-hibernate</artifactId>
                        <version>3.19.10</version>
                    </dependency>
                    <dependency>
                        <groupId>jakarta.persistence</groupId>
                        <artifactId>jakarta.persistence-api</artifactId>
                        <version>3.1.0</version>
                    </dependency>
                    <dependency>
                        <groupId>org.n52.sensorweb-server.db-model</groupId>
                        <artifactId>db-model-entities</artifactId>
                        <version>${db-model.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.n52.sensorweb-server.db-model</groupId>
                        <artifactId>db-model-mappings</artifactId>
                        <version>${db-model.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

IntelliJ显示依赖已正常加载:

依赖加载截图


解决建议
  1. 调整插件执行阶段
    当前jOOQ Codegen在process-resources阶段执行,此时依赖实体类尚未编译到类路径。将执行阶段改为process-classes,确保实体类编译完成后再生成代码:

    <execution>
        <id>generate-h2-jpa</id>
        <phase>process-classes</phase>
        <goals>
            <goal>generate</goal>
        </goals>
    </execution>
    
  2. 修正packages配置
    配置中的packages属性混合了具体类和包路径,JPADatabase的packages参数仅需填写包路径,无需指定具体类名。将具体类替换为其所在包:

    <property>
        <key>packages</key>
        <value>
            org.n52.series.db.beans,
            org.n52.series.db.beans.sta,
            org.n52.series.db.beans.parameter.dataset,
            org.n52.series.db.beans.parameter.procedure,
            org.n52.series.db.beans.parameter.platform,
            org.n52.series.db.beans.parameter.observation,
            org.n52.series.db.beans.parameter.feature,
            org.n52.series.db.beans.parameter.location,
            org.n52.series.db.beans.parameter.phenomenon
        </value>
    </property>
    
  3. 修正packageName配置
    target/packageName中冗余了package前缀,直接填写包名即可:

    <packageName>org.n52.sta.data.cloudnative.schema</packageName>
    
  4. 确认persistence.xml配置有效性
    检查persistence.xml是否位于src/main/resources/META-INF/下,且持久化单元default-unit中正确声明了所有实体类和映射文件:

    <persistence-unit name="default-unit">
        <class>org.n52.series.db.beans.DataEntity</class>
        <!-- 其他实体类声明 -->
        <mapping-file>META-INF/entity.hbm.xml</mapping-file>
        <!-- 其他映射文件声明 -->
    </persistence-unit>
    
  5. 验证映射文件可访问性
    确认db-model-mappings依赖中的*entity.hbm.xml文件存在于JAR包的对应路径下,确保JPADatabase能读取到这些映射文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:02:02