簡體   English   中英

Hibernate / HSQLDB:用戶缺乏創建約束的權限

[英]Hibernate/HSQLDB: User lacks priviledges to create constraints

我將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

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>

我的initdata.properties

version=2.0.0
modified=yes
files_readonly=true

一個可能的原因是Hibernate看到另一個沒有表的空數據庫。

下面的線連接到相對路徑。 在此處以及您連接到數據庫的其他任何地方將其更改為絕對路徑,它應該可以工作。

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

另一個問題是您已在.properties文件中設置files_readonly。 首次連接時,請勿創建屬性文件,而應讓引擎創建數據庫。 刪除任何現有數據庫。

對我來說,使用此行解決了問題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM