我正在尝试将单元测试与 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/