当表映射使用其他数据库时,如何创建内存中的测试数据库?

时间:2012-08-27 13:58:04

标签: spring hibernate jpa hsqldb dbunit

我正在尝试为使用Spring和JPA(使用Hibernate)的应用程序创建一些测试。

我想使用内存数据库,以便我可以检查一切是否正常工作而不必依赖主开发服务器(这是一个旧的Sybase安装),并且还允许我更好地隔离测试功能

问题是,有许多表使用@Table("dbname..dbo.someviewname")映射来访问其他数据库中的视图。 所以,我试图将HSQLDB与DBunit一起使用,但HSQLDB可以理解为不允许在名称中创建带点的表。

我该怎样对其进行测试?

我是否应该放弃内存中的东西并使用主要的Sybase开发服务器进行测试(冒着破坏其他开发人员的风险:P)?

1 个答案:

答案 0 :(得分:0)

dbname.dbo.someviewname HSQLDB可能会将dbname作为目录,dbo作为模式,somewiewname作为表名。

HSQLDB允许创建名称中带有点的表。这可以通过将表名称作为分隔标识符来完成:

@Table(name="\"dbname.dbo.someviewname\"")

但是你不想使用它,因为那样对于Sybase来说如何处理名称。如果您可以为测试分别使用orm.xml,则可以将以下内容添加到orm.xml:

    <persistence-unit-defaults>
        <delimited-identifiers/>
    </persistence-unit-defaults>  

它会将所有数据库对象名称视为分隔标识符。根据您的映射和查询,它最终可以工作,但很可能您将面临一些问题。可能最好的方法不是在映射中使用模式名称和/或在测试中使用单独的Sybase实例。