使用 H2 DB 进行 Spring/Hibernate 集成测试

Posted

技术标签:

【中文标题】使用 H2 DB 进行 Spring/Hibernate 集成测试【英文标题】:Spring/Hibernate Integration Test with H2 DB 【发布时间】:2013-04-18 22:51:03 【问题描述】:

我正在构建一个 Spring/Hibernate/Postgres api,它工作正常。我想在内存中使用 H2 DB 编写集成测试。我知道如何创建 test-applicationContext。但是我在创建表格时遇到了一些问题。

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:mem:processdb;INIT=RUNSCRIPT FROM 'classpath:create.sql'" 
        />
</bean>

现在 create.sql 有一个 sql 查询来创建所需的模式和表。但是 Hiberate 应该处理它,我认为我不必使用查询来创建表,hibernate 应该从模型注释中处理它?我在我的 persistence.xml 中定义了所有内容,但最后它说找不到表“用户”。任何人都可以建议我如何在集成测试中创建表或指出我正确的方向吗? 谢谢

【问题讨论】:

【参考方案1】:

您在 jdbc 连接字符串上缺少 close_delay 标志。没有这个 H2 每次释放最后一个连接时都会关闭数据库。因此,架构在创建后直接丢失。

jdbc:h2:mem:processdb;DB_CLOSE_DELAY=-1

【讨论】:

以上是关于使用 H2 DB 进行 Spring/Hibernate 集成测试的主要内容,如果未能解决你的问题,请参考以下文章

postgres和h2 db中名称中的#字符问题

如何从 Java 和 H2 DB 连接到 H2 数据库

为啥 H2 DB FileLock.sleep() 需要这么长时间?

在单元测试时支持 H2 数据库中的 DB2 功能

H2 db插入带引号的数据抛出异常

将 h2 数据库从 h2.db 转换为 mv.db