2010-06-01 74 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