【问题标题】:GAE - JPA - datanucleus data retrieval error - PESSIMISTIC_READGAE - JPA - datanucleus 数据检索错误 - PESSIMISTIC_READ
【发布时间】:2013-11-01 04:15:42
【问题描述】:

我是 App Engine 1.8.5 及其默认的核心数据存储版本。我在具有 GAE 插件的本地 Eclipse 设置中工作。

它在我的本地机器上成功运行所有数据存储和检索。它成功部署在 Google App 引擎服务器中。没有数据存储关系的 URL 可以正常工作,没有任何问题。 问题在于服务器中的数据存储检索。我正在使用 GAE 数据核引擎将 JPA api 用于数据存储。

问题是当我从数据存储中检索数据时,它在服务器中引发 PESSIMISTIC_READ 错误,但在本地机器上却没有。我被卡住了,无法继续。

我已经粘贴了堆栈跟踪、persistence.xml 和 EMF.java 文件供您参考。请帮忙。

Caused by: java.lang.NoSuchFieldError: PESSIMISTIC_READ
    at org.datanucleus.api.jpa.JPAQuery.getResultList(JPAQuery.java:171)
    at com.ideafolks.codelist.datastore.dao.SectorDAO.getAllSector(SectorDAO.java:122)
    at com.ideafolks.codelist.restful.SectorService.getAllSector(SectorService.java:57)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:45)

persistence.xml

<persistence-unit name="transactions-optional">
    <provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
    <class>com.ideafolks.codelist.datastore.tables.Sector</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <property name="datanucleus.NontransactionalRead" value="true" />
        <property name="datanucleus.NontransactionalWrite" value="true" />
        <property name="datanucleus.ConnectionURL" value="appengine" />
        <property name="datanucleus.singletonEMFForName" value="true" /> <!-- 
        <property name="datanucleus.appengine.datastoreReadConsistency" value="EVENTUAL" />  -->
    </properties>
</persistence-unit>

EMF.java

public final class EMF {
    private static final EntityManagerFactory emfInstance = Persistence
            .createEntityManagerFactory("transactions-optional");

    private EMF() {
    }

    public static EntityManagerFactory get() {
        return emfInstance;
    }
}

【问题讨论】:

    标签: java google-app-engine google-cloud-datastore datanucleus


    【解决方案1】:

    您可能已将 persistence-api-1.0.jar 添加到您的类路径中。 geronimo-jpa_2.0_spec-1.0.jar 具有更新版本的 JPA API(LockModeType 具有 PE​​SSIMISTIC_READ 字段),因此您只需删除 persistence-api-1.0.jar 就可以正常工作。您的应用程序在本地工作,因为您可能在类路径上具有更高的 GAE 容器。

    【讨论】:

      【解决方案2】:

      我以前遇到过这个错误,它也发生在 gae 而不是 eclipse 上...... 当您在表中没有任何数据之前尝试从表中读取时,就会发生这种情况。尝试先插入一条记录..也许创建一个初始化 servlet。我不认为你的代码有什么问题

      【讨论】:

        【解决方案3】:

        错误只是在 jar geronimo-jpa_2.0_spec-1.0 中找不到成员字段 PESSIMISTIC_READ。我已经尝试了这个 jar 的所有版本。它根本找不到这个成员。所以我所做的只是将这个枚举添加到项目中

        包javax.persistence;

        公共枚举 LockModeType { 读, 写, 乐观的, OPTIMISTIC_FORCE_INCREMENT, PESSIMISTIC_READ, PESSIMISTIC_WRITE, PESSIMISTIC_FORCE_INCREMENT, 没有 }

        问题解决了。

        【讨论】:

          【解决方案4】:

          不要忘记从 war/WEB-INF/lib 中删除 persistence-api-1.0.jar。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-06-20
            • 1970-01-01
            • 1970-01-01
            • 2014-07-29
            • 2014-11-12
            • 2018-03-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多