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

