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

时间:2014-04-26 02:06:28

标签: 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数据库无法识别此tablename语法:

SchemaB..table

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

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:4)

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

@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并在connect上创建架构。


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

该项目有一个init.sql文件,可以创建2个schema,foo和bar。

使用@Entity(schema =“foo”,name =“A”)的2个模型类foo.A和bar.B相应地指定模式。看app / models。

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