代码之家  ›  专栏  ›  技术社区  ›  wishi

关于OpenJPA的HSQLdb权限

  •  0
  • wishi  · 技术社区  · 15 年前

    still )与HSQLdb有大量问题;打开JPA。

    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>
    

    但是每次我用

    EntityManagerHelper.commit();
    

    它因那个错误而失败,这对我来说毫无意义。SA是我用来创建表的标准管理用户。它应该能够作为这个用户持久存在到hsqldb中。

    编辑:经过几个小时的调试,我找到了失败的原因。如果未设置所需的表条目(不为NULL),也会出现此类错误消息。对我来说,这并没有说明这一点。似乎OpenJPA层由于权限问题缺少条目而导致无法插入语句。因此,我只是接受了第一个答案。感谢阅读:)

    1 回复  |  直到 8 年前
        1
  •  1
  •   Peter Tillemans    15 年前

    我认为HSQL无权在配置的目录中写入其数据文件。

    当我以root/Administrator身份手动测试服务器时,这种情况经常发生,当我以守护程序/服务的身份启动服务器时,它会变为权限较低的用户。然后,当服务器以身份运行时,文件由另一个用户拥有。