【问题标题】:h2 database unit test across multiple schema跨多个模式的 h2 数据库单元测试
【发布时间】:2014-04-26 02:06:28
【问题描述】:

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

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

任何建议将不胜感激。

【问题讨论】:

    标签: database unit-testing h2


    【解决方案1】:

    您可能希望使用 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基本思路一样)

    【讨论】:

    • 我们可以在同一个 h2 数据库中有多个架构(多个)吗?
    • 嗨@TinyOS,我不明白为什么不这样做。我刚刚启动了 h2 控制台(通过运行 java -jar h2-1.4.185.jar),并创建了 2 个模式 foo 和 bar。我觉得不错。
    • 嗨@Douglas Liu,我使用了一个sql文件,在其中创建了我需要的所有模式,并在persistance.xml中重新加载了该文件:jdbc:h2:mem:play;MODE=MySQL;INIT=RUNSCRIPT FROM 'test/schema.sql'
    • 嗨@TinyOS,我创建了一个演示项目,它使用2个模式和JPA+H2。请查看编辑后的答案。
    猜你喜欢
    • 2019-04-01
    • 2017-12-30
    • 2019-05-24
    • 2010-11-23
    • 2010-10-01
    • 2012-12-12
    • 2019-11-15
    • 2019-10-10
    • 2021-06-14
    相关资源
    最近更新 更多