如何在 HSQLDB 中创建多个目录

Posted

技术标签:

【中文标题】如何在 HSQLDB 中创建多个目录【英文标题】:How to create multiple catalog's in HSQLDB 【发布时间】:2017-07-14 06:44:59 【问题描述】:

使用嵌入式 HSQLDB 进行单元测试时,似乎无法正确处理在休眠实体映射文件中定义的架构和/或目录。休眠映射如下所示:

<class name="ca.zl.Orders" table="Orders" schema="dbo" catalog="db1">

将属性"hibernate.connection.url" 设置为"jdbc:hsqldb:mem:db1",我总是收到以下错误

org.hibernate.tool.hbm2ddl.SchemaExport:用户缺少权限或找不到对象:DB1 org.hibernate.tool.hbm2ddl.SchemaExport:无效的模式名称:DBO 这似乎是由 HSQLDB 默认情况下只有一个名为“PUBLIC”的目录引起的,请参阅此处的文档。

我无法更改休眠实体映射,我不想使用其他数据库引擎(我知道 H2DB 可以处理这个)。谁能解释一下如何让 HSQLDB 在这个单元测试环境中工作?

【问题讨论】:

【参考方案1】:

Hibernate ORM 中的模式工具系统不会创建指定的数据库、模式或相应的表空间。在启动 Hibernate 应用程序之前,由最终用户确保这些对象存在。

在您的情况下,您正在尝试使用名为 dbo 的非默认架构,在这种情况下,我的建议是考虑使用 Hibernate 提供的 import.sql 脚本功能,以便您可以选择创建如果不存在基于您在引导时需要的架构。这应该有效地使该模式在内存数据库中可用,并且模式工具过程的其余部分应该按预期工作。

【讨论】:

【参考方案2】:

在运行测试之前,重命名目录并创建架构:

ALTER CATALOG PUBLIC RENAME TO DB1
CREATE SCHEMA DBO

【讨论】:

Altering 将适用于一个 DAO 调用,但从我的业务层我调用不同的 DAO 层。我们需要同时使用不同的模式进行集成测试。如果您提供同时创建多个目录的选项会更好。

以上是关于如何在 HSQLDB 中创建多个目录的主要内容,如果未能解决你的问题,请参考以下文章

表hsqldb之间的关系

如何解决 hsqldb 中的 SQLSyntaxErrorException?

HSQLDB 2.3.3:如何创建自定义类型?

在 LibreOffice Base 中创建等效数据透视表的 SQL (HSQLDB) 查询

如何在 HSQL DB 中创建具有最大行值的序列?

如何删除 hsqldb 中的默认数据库/模式