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

Hibernate Reactive单元测试报错:quarkus.CODE表不存在

问题排查:Hibernate Reactive测试提示表'quarkus.CODE'不存在

问题场景

执行JUnit测试时抛出如下错误:

DDL command failed [io.vertx.mysqlclient.MySQLException: Table 'quarkus.CODE' doesn't exist]

测试代码:

@Test
void getTransferDetails() {
    Transfer transferObj = transferRepository.getTransferDetails(transfer);
    Assertions.assertNotNull(transferObj);
}

对应的Repository方法:

public Transfer getTransferDetails(Transfer transfer) {
    Uni<Transfer> uniTranfer = null;
    Transfer tranfer = null;
    try {
        if(transfer != null){
            StringBuilder sqlQuery = createSqlQuery(transfer);
            Mutiny.Query<Transfer> q = em.createQuery(sqlQuery.toString(), Transfer.class);
            setQueryParameter(transfer,q);
            uniTranfer = q.getSingleResult();
            tranfer = uniTranfer.await().atMost(Duration.ofSeconds(10));
        }
    }catch(Exception e){
        logger.error("Getting Exception getTransferDetails "+e.getMessage());
    }
    return tranfer;
}

排查解决步骤

1. 确认数据库表是否存在

登录测试用的MySQL数据库,执行以下SQL检查quarkus库下的CODE表:

USE quarkus;
SHOW TABLES LIKE 'CODE';

如果表不存在,先确认是否有对应的实体类映射,或是遗漏了表创建脚本。

2. 检查Hibernate DDL生成配置

查看测试环境配置文件(如application-test.properties),确认Hibernate的DDL策略:

  • 若配置hibernate.hbm2ddl.auto=create或update,Hibernate应自动生成表,但可能因实体映射错误导致表未创建。
  • 若配置为none,则需要手动执行DDL脚本创建表。

3. 核查实体类映射

找到对应CODE表的实体类,检查:

  • @Table注解是否正确指定name="CODE",若库名需要显式指定,是否添加了schema="quarkus"。
  • 实体字段是否与表结构匹配,避免因映射错误导致Hibernate无法生成表。

4. 检查SQL查询中的表引用

查看createSqlQuery方法生成的SQL语句,确认是否直接引用了CODE表,但该表未被正确创建或映射。注意MySQL的表名大小写敏感配置,确保拼写完全一致。

5. 验证测试环境数据库连接

确认测试配置中的数据库URL、用户名、密码是否正确,是否连接到预期的quarkus库。例如检查:

quarkus.datasource.reactive.url=vertx-reactive:mysql://localhost:3306/quarkus

内容的提问来源于stack exchange,提问作者J M Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:52:45