2010-06-01 78 views
0

我是(still),它具有OpenCL的HSQLdb &问题。关于OpenJPA的HSQLdb权限

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层的错误不能插入语句,因为缺少权限问题的条目。因此,我只是接受了第一个答案。感谢阅读:)

回答

1

我有这样的印象,HSQL没有权限在配置的目录中写入它的数据文件。

我一直以root/Administrator身份手动测试服务器时发生这种情况,并且在将其作为守护程序/服务启动时,它会更改为权限较低的用户。然后当服务器正在运行时,这些文件由另一个用户拥有。

这可能是其他原因:在Windows上,当另一个进程(另一个服务器实例)仍然依附于这些文件时,或者即使以其无限智慧的eclipse决定索引数据库时,也是如此。

+0

我将Linux机器上的文件权限更改为777,并将其作为Java和Eclipse的用户运行 - 同样的错误。不能是文件许可问题。 – wishi 2010-06-01 17:28:56

+0

也许它找错了地方。 HSQL将定期写入其db文件。您可能会检查数据库数据目录中的文件是否存在,以及它们是否具有最近的修改时间戳。如果不是这样,那么从相对路径开始的问题可能会从不同的应用程序根目录开始。 – 2010-06-01 18:00:50