我在测试一个查询多个目录/模式的Hibernate应用程序时遇到了问题。
生产数据库是Sybase,除了映射到默认目录/模式的实体之外,还有两个实体映射如下。因此总共有三个目录。
@Table(catalog = "corp_ref_db", schema = "dbo", name = "WORKFORCE_V2")
public class EmployeeRecord implements Serializable {
}
@Table(catalog = "reference", schema = "dbo", name="cntry")
public class Country implements Serializable {
}
这一切都在应用程序中有效,没有任何问题。但是,当单元测试时,我通常的策略是使用HSQL,将hibernate的ddl标志设置为auto,并让dbunit填充表。
当表格都在同一个模式中时,这一切都正常。
但是,由于添加了这些附加表,因为DDL不会运行,所以测试会被破坏,因为HSQL只支持一个目录。
create table corp_ref_db.dbo.WORKFORCE_V2
user lacks privilege or object not found: CORP_REF_DB
如果只有两个目录,那么我认为可以通过将HSQL数据库中的默认目录和模式更改为明确定义的目录来实现这一目标:
是否有其他可能有效的内存数据库,或者是否存在使测试在HSQL中运行的策略。
我曾想过提供一个指定默认目录和模式的orm.xml文件(覆盖任何注释并在默认目录/模式中创建所有已定义的表)但是当DDL时似乎没有观察到这些覆盖被执行,即我得到与上面相同的错误。
基本上,我想运行我现有的测试,并以某种方式创建表,因为它们是在映射中定义的,或者以某种方式覆盖实体级别的目录/模式定义。
我想不出任何方法可以实现这两种结果。有什么想法吗?