我正在尝试将单元测试与 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 个点。
任何建议将不胜感激。
您可能希望使用 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 具有相同的想法)
| 归档时间: |
|
| 查看次数: |
6697 次 |
| 最近记录: |