如何在 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 中的 SQLSyntaxErrorException?