java - 使用多个数据库目录对 Hibernate 进行单元测试

标签 java hibernate testing schema dbunit

我在测试查询多个目录/模式的 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 时似乎没有观察到这些覆盖被执行,即我得到与上面相同的错误。

基本上,然后我想运行我现有的测试,或者以某种方式创建表,因为它们在映射中定义,或者以某种方式覆盖实体级别的目录/模式定义。

我想不出任何方法来实现这两种结果。有什么想法吗?

最佳答案

我相信H2支持目录。我自己没有在其中使用过它们,但是 Information Schema 中有一个 CATALOGS 表.

关于java - 使用多个数据库目录对 Hibernate 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10317834/

相关文章:

java - Firebase 身份验证为 getCurrentUser() 返回 NULL

java - 在 Java 中将字符串转换为 ByteBuffer

java - hibernate 搜索错误

testing - 有哪些工具可用于对网站进行质量检查?这被视为单元测试

java - 如何通过一次仅按一个按键来赋予玩家速度 LibGDX Box2d

java - 与父 JPanel 通信

java - 无法删除作为@OneToOne 关系目标的实体

java - 从 hibernate 状态锁定整个 mysql 数据库

android - 为多个 Activity 运行 Android MonkeyRunner

selenium - 我可以保存或 fork Selenium 浏览器的当前状态吗?