我正在尝试使用单元测试和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个点。
任何建议都将不胜感激。
答案 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具有相同的想法)