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

H2内存数据库无法为JPA实体创建表问题求助

H2内存数据库持久化MyClass实体时提示表不存在的问题

我正在为公司应用后端编写单元测试,后端以数据库CRUD操作为主,测试环境配置了连接H2内存数据库的EntityManager。多数功能交互正常,但持久化特定实体类MyClass时抛出错误:
org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "my_class" not found

测试代码如下:

@Test
public void temp() {
    MyClass myObj = new MyClass();
    entityManager.getTransaction().begin();
    entityManager.persist(myObj);
    entityManager.getTransaction().commit();
}

src/main/resources/META-INF/persistence.xml中的持久化单元配置:

<persistence-unit name="com.mycompany.test.h2">
    <description>AVM Persistence Unit</description>
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="javax.persistence.jdbc.driverClassName" value="org.h2.Driver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:avm_test;INIT=RUNSCRIPT FROM 'classpath:init_test_H2.sql';DATABASE_TO_UPPER=false"/>
        <property name="javax.persistence.jdbc.user" value="sa"/>
        <property name="javax.persistence.jdbc.password" value=""/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect"/>
        <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        <property name="hibernate.default_schema" value="mycompany"/>
    </properties>
</persistence-unit>

补充说明:

  • 已添加;DATABASE_TO_UPPER=false,错误中的表名格式与实体类声明一致,但问题仍未解决
  • 配置;INIT=RUNSCRIPT FROM 'classpath:init_test_H2.sql'是因为H2无法自动创建schema,需通过脚本预先创建
  • MyClass实体标注了@Entity @Table(name="my_class")并实现Serializable,与其他正常实体同包,未发现异常点
  • 已生成最小可复现示例项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:10:20