0

私は (まだ) HSQLdb と OpenJPA で多くの問題を抱えています。

Exception in thread "main" <openjpa-1.2.0-r422266:683325 fatal store error> org.apache.openjpa.persistence.RollbackException: user lacks privilege or object not found: OPENJPA_SEQUENCE_TABLE {SELECT SEQUENCE_VALUE FROM PUBLIC.OPENJPA_SEQUENCE_TABLE WHERE ID = ?} [code=-5501, state=42501]
    at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:523)
    at model_layer.EntityManagerHelper.commit(EntityManagerHelper.java:46)
    at HSQLdb_mvn_openJPA_autoTables.App.main(App.java:23)

HSQLdb はサーバー プロセスとして実行されており、ローカル マシンのポート 9001 にバインドされています。ユーザーはSAです。次のように構成されています。

<persistence-unit name="HSQLdb_mvn_openJPA_autoTablesPU"
        transaction-type="RESOURCE_LOCAL">
        <provider>
            org.apache.openjpa.persistence.PersistenceProviderImpl
        </provider>
        <class>model_layer.Testobjekt</class>
        <class>model_layer.AbstractTestobjekt</class>
        <properties>
            <property name="openjpa.ConnectionUserName" value="SA" />
            <property name="openjpa.ConnectionPassword" value=""/>

            <property name="openjpa.ConnectionDriverName"
                value="org.hsqldb.jdbc.JDBCDriver" />
            <property name="openjpa.ConnectionURL"
                value="jdbc:hsqldb:hsql://localhost:9001/mydb" />

            <!-- 
            <property name="openjpa.jdbc.SynchronizeMappings"
                value="buildSchema(ForeignKeys=true)" />
                 -->
        </properties>
    </persistence-unit>

ORM レイヤーとの接続に成功しました。EntityManager を作成して接続できます。

ただし、使用するたびに

EntityManagerHelper.commit();

そのエラーで失敗しますが、これは私には意味がありません。SA は、テーブルの作成に使用した標準管理者ユーザーです。このユーザーとして hsqldb に永続化できるはずです。

編集:何時間ものデバッグの後、これが失敗する理由がわかりました。この種のエラー メッセージは、必要なテーブル エントリ (NOT NULL) を設定していない場合にも表示されます。それは私にとってそれを示していませんでした。パーミッションの問題でエントリが欠落しているため、OpenJPA レイヤーがステートメントを挿入できないというミスを犯したようです。したがって、私は単に最初の答えを受け入れました。読んでくれてありがとう :)

4

1 に答える 1

1

HSQLには、構成されたディレクトリにデータファイルを書き込む権限がないという印象を受けました。

これは、サーバーをルート/管理者として手動でテストするときに常に発生し、デーモン/サービスとして起動すると、権限の低いユーザーに変更されます。次に、サーバーが実行されているため、ファイルは別のユーザーによって所有されます。

他の理由である可能性があります:Windowsでは、別のプロセス(別のサーバーインスタンス)がまだファイルにしがみついていたとき、または無限の知恵で日食がデータベースのインデックスを作成することを決定したときでさえ、私はそれを持っていました.

于 2010-06-01T17:14:44.143 に答える