Java Hibernate/HSQLDB:用户缺少创建约束的权限

Java Hibernate/HSQLDB:用户缺少创建约束的权限,java,spring,hibernate,hsqldb,dbunit,Java,Spring,Hibernate,Hsqldb,Dbunit,我正在使用HSQL和DBUnit来运行单元测试。到目前为止,我可以从创建新模式的脚本开始HSQL,然后Hibernate创建表,并DBUnit在这些表中添加数据。但是,我一直有这些错误日志: 2013-10-10 09:38:05,559 INFO org.hibernate.tool.hbm2ddl.SchemaExport - HHH000227: Running hbm2ddl schema export 2013-10-10 09:38:05,563 ERROR org.hiberna

我正在使用
HSQL
DBUnit
来运行单元测试。到目前为止,我可以从创建新模式的脚本开始
HSQL
,然后
Hibernate
创建表,并
DBUnit
在这些表中添加数据。但是,我一直有这些错误日志:

2013-10-10 09:38:05,559 INFO  org.hibernate.tool.hbm2ddl.SchemaExport - HHH000227: Running hbm2ddl schema export
2013-10-10 09:38:05,563 ERROR org.hibernate.tool.hbm2ddl.SchemaExport - HHH000389: Unsuccessful: alter table dbo.MY_TABLE drop constraint FK58568EF941C829A
2013-10-10 09:38:05,563 ERROR org.hibernate.tool.hbm2ddl.SchemaExport - user lacks privilege or object not found: DBO.MY_TABLE
2013-10-10 09:38:05,564 ERROR org.hibernate.tool.hbm2ddl.SchemaExport - HHH000389: Unsuccessful: alter table dbo.MY_TABLE drop constraint FK58568EF12A53C22
2013-10-10 09:38:05,564 ERROR org.hibernate.tool.hbm2ddl.SchemaExport - user lacks privilege or object not found: DBO.MY_TABLE
2013-10-10 09:38:05,592 ERROR org.hibernate.tool.hbm2ddl.SchemaExport - HHH000389: Unsuccessful: alter table dbo.MY_TABLE add constraint FK58568EF941C829A foreign key (id_my_other_table) references dbo.MY_OTHER_TABLE
2013-10-10 09:38:05,592 ERROR org.hibernate.tool.hbm2ddl.SchemaExport - The table data is read only in statement [alter table dbo.MY_TABLE add constraint FK58568EF941C829A foreign key (id_my_other_table) references dbo.MY_OTHER_TABLE]
由于某种原因,似乎只能创建约束。 我检查了表是否已正确创建,数据是否添加了
org.hsqldb.util.DatabaseManagerSwing
。我想查看
信息模式。表约束
,但是
信息模式
是空的。可能是原因还是这些错误?还有别的吗?当我使用拥有所有特权的用户
SA
时,他应该能够创建约束

关于我的配置:

Hibernate
4.1.10.Final

HSQLDB
2.3.0

DBUnit
2.4.9

在我的
beans.xml
中,我有:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
        <property name="url" value="jdbc:hsqldb:file:initdata" />
        <property name="username" value="sa" />
        <property name="password" value="" />
    </bean>

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan">
        <list>
            <value>primobox.demat.model.sql</value>
        </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
                <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="javax.persistence.validation.mode">auto</prop>
                <prop key="hibernate.connection.defaultNChar">true</prop>
                <prop key="hibernate.connection.useUnicode">true</prop>
                <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.connection.charSet">UTF-8</prop>
            </props>
        </property>
    </bean>

一个可能的原因是Hibernate看到了另一个没有表的空数据库

下面的线连接到一个相对路径。在这里或连接到数据库的任何其他地方将其更改为绝对路径,它应该可以工作

<property name="url" value="jdbc:hsqldb:file:initdata" />


另一个问题是您在.properties文件中设置了文件\u readonly。不要创建属性文件,让引擎在您第一次连接时创建数据库。删除任何现有数据库。

对我来说,问题已通过以下行解决:

sessionFactory.getHibernateProperties().put("hibernate.hbm2ddl.auto", "create");

我也有你的麻烦。我也尝试过内存中的H2和Mysql。。我认为这会导致我在运行多个测试时遇到的问题..我发现了这个。。谢谢你的链接,我没有在常见问题中看到它。然而,这并没有解决我的问题@弗雷德回答了!删除
文件\u readonly
并更改初始化脚本的路径解决了我的问题。这是我的
bean的属性之一。xml
dbUnit从那时起发展了很多。我已经很久没有犯奇怪的错误了^^
sessionFactory.getHibernateProperties().put("hibernate.hbm2ddl.auto", "create");