我是App Engine 1.8.5及其默认的核心数据存储版本。我在具有GAE插件的本地Eclipse安装程序中工作。
它可以在我的本地计算机上成功地进行所有数据存储和检索。它已在Google App引擎服务器中成功部署。没有数据存储关系的URL工作正常,没有任何问题。 问题在于服务器中的数据存储检索。我使用GAA datanuclues引擎将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-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;
}
}
答案 0 :(得分:1)
您可能已将persistence-api-1.0.jar添加到类路径中。 geronimo-jpa_2.0_spec-1.0.jar有更新版本的JPA API(LockModeType有PESSIMISTIC_READ字段),所以你可以删除persistence-api-1.0.jar,一切都会正常工作。您的应用程序在本地工作,因为您可能在类路径上有更高的GAE容器。
答案 1 :(得分:0)
我以前遇到过这个错误,它发生在gae而不是eclipse上...... 当您在表中有任何数据之前尝试从表中读取时会发生这种情况。尝试先插入一条记录..也许创建一个初始化servlet。我不认为你的代码有什么问题
答案 2 :(得分:0)
错误只是在jar geronimo-jpa_2.0_spec-1.0中找不到成员字段PESSIMISTIC_READ。我已经尝试过这个jar的所有版本。它根本找不到这个成员。所以我所做的只是将这个枚举添加到项目中
包javax.persistence;
public enum LockModeType { 读, 写, 乐观, OPTIMISTIC_FORCE_INCREMENT, PESSIMISTIC_READ, PESSIMISTIC_WRITE, PESSIMISTIC_FORCE_INCREMENT, 没有 }
问题解决了。
答案 3 :(得分:0)
不要忘记从war / WEB-INF / lib中删除persistence-api-1.0.jar。