我(still)对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是我用来创建表的Standard Admin用户。它应该能够以该用户身份持久化到hsqldb中。
编辑:经过几个小时的调试,我找到了失败的原因。如果未设置所需的表项(非NULL),也会出现此类错误消息。对我来说,这并不意味着什么。由于缺少权限问题的条目,OpenJPA层似乎错误地不能插入语句。因此,我简单地接受了第一个答案。感谢阅读:)
发布于 2010-06-02 01:14:44
我的印象是HSQL无权在配置的目录中写入它的数据文件。
当我以root/Administrator身份手动测试我的服务器时,这种情况总是发生在我身上,而当它作为守护进程/服务启动时,它将更改为较低权限的用户。当服务器作为服务器运行时,这些文件归另一个用户所有。
这可能是其他原因:在Windows上,当另一个进程(另一个服务器实例)仍在使用文件时,或者甚至当eclipse以其无限的智慧决定为数据库建立索引时,我使用了它。
https://stackoverflow.com/questions/2951763
复制相似问题