0

単体テストを実行するためHSQLに withを使用しています。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。中をのぞきたかったのですINFORMATION_SCHEMA.TABLE_CONSTRAINTSが、INFORMATION_SCHEMA空っぽです。それが理由でしょうか、それともこれらのエラーでしょうか? 他の何か?すべての権限を持つユーザーSAを使用しているため、制約を作成できるはずですか?

私の構成について:

Hibernate4.1.10.最終

HSQLDB2.3.0

DBUnit2.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
4

2 に答える 2

1

考えられる原因の 1 つは、Hibernate がテーブルを持たない別の空のデータベースを認識することです。

以下の行は相対パスに接続します。ここと、データベースに接続する他の場所の絶対パスに変更すると、機能するはずです。

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

もう 1 つの問題は、.properties ファイルで files_readonly を設定したことです。プロパティ ファイルを作成せず、最初の接続時にエンジンにデータベースを作成させます。既存のデータベースを削除します。

于 2013-10-10T09:34:25.327 に答える