使用嵌入式HSQLDB进行单元测试时,似乎无法正确处理hibernate实体映射文件中定义的模式和/或目录。 hibernate映射看起来像:
<class name="ca.zl.Orders" table="Orders" schema="dbo" catalog="db1">
将属性"hibernate.connection.url"
设置为"jdbc:hsqldb:mem:db1"
,我总是遇到以下错误
org.hibernate.tool.hbm2ddl.SchemaExport:user缺少未找到的权限或对象:DB1 org.hibernate.tool.hbm2ddl.SchemaExport:模式名称无效:DBO 这似乎是由HSQLDB引起的,默认情况下只有一个名为“PUBLIC”的目录,请参见此处的文档。
我无法更改hibernate实体映射,我不想使用其他数据库引擎(我知道H2DB可以处理这个)。任何人都可以了解如何在这个单元测试环境中使HSQLDB工作吗?
答案 0 :(得分:0)
Hibernate ORM中的Schema Tooling系统不会创建指定的数据库,模式或相应的表空间。在启动Hibernate应用程序之前,最终用户可以确保这些对象存在。
在您的情况下,您尝试使用名为dbo
的非默认架构,在这种情况下,我的建议是使用Hibernate提供的import.sql
脚本功能,以便根据您在引导程序中的需要,您可以选择创建架构(如果不存在)。这应该有效地使该模式在内存数据库中可用,并且模式工具过程的其余部分应该按预期工作。
答案 1 :(得分:0)
在运行测试之前,重命名目录并创建架构:
ALTER CATALOG PUBLIC RENAME TO DB1
CREATE SCHEMA DBO