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

1 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;

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

}
Run Code Online (Sandbox Code Playgroud)

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

SchemaB..表

注意:模式名称和表名称之间的 2 个点。

任何建议将不胜感激。

Dou*_*Liu 6

您可能希望使用 Table JPA 注释的 schema 属性。例如:

@Entity(name = "Foo")
@Table(name = "TABLE_FOO", schema = "bar")
Run Code Online (Sandbox Code Playgroud)

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

jdbc:h2:mem:play;MODE=MySQL;INIT=RUNSCRIPT FROM 'test/init.sql'
Run Code Online (Sandbox Code Playgroud)

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

CREATE SCHEMA IF NOT EXISTS bar
Run Code Online (Sandbox Code Playgroud)

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


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

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

2 个模型类 foo.A 和 bar.B 使用 @Entity(schema="foo", name="A") 相应地指定架构。请参阅应用程序/模型。

测试用例使用 play 框架,因此每次执行测试用例时都可以应用内置的进化工具。但是在执行测试用例之前使用setUp方法应用自己的sql脚本应该没问题。请参阅示例测试用例的测试文件夹。(它实际上是 scalaTest 但它基本上与 junit 具有相同的想法)