java - hibernate/HSQLDB : User lacks priviledges to create constraints

标签 java spring hibernate hsqldb dbunit

我使用 HSQLDBUnit 来运行我的单元测试。到目前为止,我可以从创建新架构的脚本启动 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 添加。我想查看 INFORMATION_SCHEMA.TABLE_CONSTRAINTS,但 INFORMATION_SCHEMA 是空的。可能是原因还是这些错误?还有别的事吗?由于我使用的用户 SA 拥有所有权限,他应该能够创建约束?

关于我的配置:

hibernate 4.1.10.Final

HSQLDB2.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>

我的initdata.properties

version=2.0.0
modified=yes
files_readonly=true

最佳答案

一个可能的原因是 Hibernate 看到一个不同的、没有表的空数据库。

下面的行连接到相对路径。在此处以及连接到数据库的其他任何地方将其更改为绝对路径,它应该可以工作。

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

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

关于java - hibernate/HSQLDB : User lacks priviledges to create constraints,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19290771/

相关文章:

java - 如何在 hibernate 映射文件中为特定数据库指定 SQL 列类型

java - 如何在 Eclipse 中使用 Lombok 生成复杂 json 的 pojo

java - Spring Roo JPA - 为什么手动数据库更新在持久性上下文中自动可用?

spring - 根据用户角色反序列化 JSON 字段

json - 如何在 Grails 中实现输入 JSON 验证?

java - 是否可以将属性定义从配置移动到资源?

java - JPA QL 用于选择多对多关系的非拥有方?

java - 内容从 JPanel 的 vCenter 开始

java - PIL库打印的文本没有最好的定义

java - 如何使用 Maven 配置文件设置 Spring Activity 配置文件