繁体   English   中英

GAE-JPA-数据核数据检索错误-PESSIMISTIC_READ

[英]GAE - JPA - datanucleus data retrieval error - PESSIMISTIC_READ

我是App Engine 1.8.5及其默认的核心数据存储版本。 我正在使用具有GAE插件的本地Eclipse安装程序。

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

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

我已经粘贴了堆栈trace,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;
    }
}

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

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

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

包javax.persistence;

公共枚举LockModeType {读,写,OPTIMISTIC,OPTIMISTIC_FORCE_INCREMENT,PESSIMISTIC_READ,PESSIMISTIC_WRITE,PESSIMISTIC_FORCE_INCREMENT,无}

问题解决了。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM