关于 OpenJPA 的 HSQLdb 权限

Posted

技术标签:

【中文标题】关于 OpenJPA 的 HSQLdb 权限【英文标题】:HSQLdb permissions regarding OpenJPA 【发布时间】:2010-06-01 17:07:48 【问题描述】:

我 (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 是我用来创建表的标准管理员用户。它应该能够作为这个用户持久化到 hsqldb 中。

编辑:经过数小时的调试,我发现了失败的原因。如果您没有设置必需的表条目(NOT NULL),也会出现这种错误消息。它并没有对我表明这一点。由于缺少权限问题的条目,OpenJPA 层似乎无法插入语句。因此,我只是接受了第一个答案。感谢阅读:)

【问题讨论】:

【参考方案1】:

我的印象是 HSQL 无权将其数据文件写入配置的目录。

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

这可能是其他原因:在 Windows 上,当另一个进程(另一个服务器实例)仍然紧贴文件时,或者甚至当 eclipse 以其无限智慧决定索引数据库时。

【讨论】:

我将我的 Linux 机器上的文件权限更改为 777,以与 Java 和 Eclipse 相同的用户身份运行它 - 相同的错误。不可能是文件权限问题。 可能是找错地方了。 HSQL 将定期写入其 db 文件。您可以检查数据库数据目录中的文件是否存在以及它们是否具有最近的修改时间戳。如果不是,则从与预期不同的应用程序根目录开始的相对路径可能存在问题。

以上是关于关于 OpenJPA 的 HSQLdb 权限的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB Spring 用户缺少权限

HSQLDB在程序和文件中锁定文件-文件目录写权限

HSQLDB:用户缺少权限或找不到对象错误

Java HQL org.hsqldb.HsqlException:用户缺少权限或找不到对象

SpringBoot 用户缺少权限或找不到对象 HSQLDB

HSQLDB:java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象