database - 跨多个模式的 h2 数据库单元测试

标签 database unit-testing h2

我正在尝试将单元测试与 h2 数据库一起使用。我的应用程序使用 MSSQL 数据库。下面是我的应用程序中使用的 2 个表:

SchemaA.dbo.Table1<br>
SchemaB.dbo.table2<br>

@Entity<br>
@Table(name="SchemaB..table")<br>
Class A <br>
{

  private Long id;

  ............

}

我正在尝试编写单元测试来测试上述类的持久性。但是 h2 数据库不识别这个表名语法:

SchemaB..table

注意:架构名称和表名称之间的 2 个点。

如有任何建议,我们将不胜感激。

最佳答案

您可能想要使用 Table JPA 注释的架构属性。 例如:

@Entity(name = "Foo")
@Table(name = "TABLE_FOO", schema = "bar")

如果您有一个数据源,它通过用户 A 连接到您的 h2。为了访问架构“bar”,您可能希望告诉 h2 在连接时自动创建架构“bar”。

jdbc:h2:mem:play;MODE=MySQL;INIT=RUNSCRIPT FROM 'test/init.sql'

JDBC URL test/init.sql 的最后一部分指向一个包含以下内容的 sql 文件。

CREATE SCHEMA IF NOT EXISTS bar

H2 将执行 sql 并在连接时创建模式。


我在 github 创建了一个演示项目.

该项目有一个 init.sql 文件,它创建了 2 个模式,foo 和 bar。

2 个模型类 foo.A 和 bar.B,它们使用 @Entity(schema="foo", name="A") 相应地指定模式。查看应用程序/模型。

测试用例使用play框架,因此每次执行测试用例时都可以应用内置的进化工具。但是在执行测试用例之前使用setUp方法应用自己的sql脚本应该没问题。请查看示例测试用例的测试文件夹。 (实际上是scalaTest,但是和junit的思路基本一样)

关于database - 跨多个模式的 h2 数据库单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23305778/

相关文章:

visual-studio-2010 - 在 Visual Studio 2010 中使用 Microsoft Chess

java - hibernate + Apache Tomcat。嵌入式数据库相对路径

android - 如何在 Android 应用程序升级后更新表架构?

php - 使用 limit(20) 时,它仅运行 DB 的前 20 个值

c# - 测试类可以有属性吗?

python pytest 偶尔会因 OSError : reading from stdin while output is captured 而失败

java - 如何将H2数据库文件存储到项目目录中

java - 我在 IntelliJ IDEA 和 TomCat 中收到 java.lang.NullPointerException

mongodb - 使用 MongoDB 有效地确定层次结构中记录的所有者

c# - 在 MVC 中使用 EF 创建多个数据库并将数据库名称作为 web.config 中的变量传递给 InitialCatalogue