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

Quarkus多模块应用测试报错:Not an entity [Customer类]

Quarkus多模块应用测试报错:Not an entity [class org.agoncal.quarkus.jpa.Customer]

针对你遇到的测试失败问题,以下是具体排查和解决步骤:

1. 统一Jakarta/Javax注解与依赖

Quarkus 3及以上版本完全基于Jakarta EE规范,混用旧的Javax注解会导致Hibernate无法识别实体:

  • 检查Customer类的@Entity注解,确保是jakarta.persistence.Entity,而非javax.persistence.Entity。
  • 确认Customer模块的pom.xml中引入的是Jakarta持久化API依赖:
    <dependency>
      <groupId>jakarta.persistence</groupId>
      <artifactId>jakarta.persistence-api</artifactId>
      <scope>provided</scope>
    </dependency>
    
  • 同步vintage-store模块的所有JPA相关依赖,确保全为Jakarta版本,避免javax和jakarta依赖共存。

2. 验证模块间依赖配置

确保vintage-store模块正确引入Customer模块的依赖,且范围满足测试需求:

<dependency>
  <groupId>org.agoncal.quarkus</groupId>
  <artifactId>customer-module</artifactId>
  <version>${project.version}</version>
  <scope>compile</scope>
</dependency>

3. 配置实体类扫描范围

如果Customer实体不在vintage-store模块的默认扫描路径下,需要手动指定扫描范围:

  • 在vintage-store模块的application-test.properties中添加:
    quarkus.hibernate-orm.packages=org.agoncal.quarkus.jpa
    
  • 或者在CustomerRepository类上添加Jakarta的@EntityScan注解:
    import jakarta.persistence.EntityScan;
    import io.quarkus.hibernate.orm.panache.PanacheRepository;
    
    @EntityScan("org.agoncal.quarkus.jpa")
    public class CustomerRepository implements PanacheRepository<Customer> {
        // 仓库实现代码
    }
    

4. 检查测试类与持久化配置

  • 确保测试类使用@QuarkusTest注解,保证测试环境正确加载Quarkus上下文及依赖模块的实体。
  • 若自定义了persistence.xml,确认文件中显式声明了Customer实体:
    <persistence-unit name="test">
      <class>org.agoncal.quarkus.jpa.Customer</class>
      <!-- 其他持久化配置 -->
    </persistence-unit>
    

5. 分步构建模块

先单独构建Customer模块,再构建vintage-store模块,避免依赖模块未正确编译导致类加载异常:

cd customer-module
mvn clean install
cd ../vintage-store
mvn clean install

内容的提问来源于stack exchange,提问作者Jan D.M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:35:08