私は (まだ) 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 レイヤーがステートメントを挿入できないというミスを犯したようです。したがって、私は単に最初の答えを受け入れました。読んでくれてありがとう :)