我(仍然)对 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 层似乎无法插入语句。因此,我只是接受了第一个答案。谢谢阅读 :)