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
相关产品推荐
相关产品推荐

