我在测试一个查询多个目录/模式的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 {
}
在应用程序中,所有这些都可以正常运行,没有任何问题。然而,在单元测试时,我的一般策略是使用带有hibernate ddl标志设置为auto的HSQL,并让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 时似乎没有遵守这些覆盖,即我得到与上面相同的错误。
因此,我希望能够运行现有的测试,并以某种方式创建按照映射定义的表,或者以某种方式在实体级别覆盖目录/模式定义。
我无法想出任何实现这两个结果的方法。有什么想法吗?