Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GAE JPA 2.0 Txn快速回滚_Java_Google App Engine_Jpa_Transactions - Fatal编程技术网

Java GAE JPA 2.0 Txn快速回滚

Java GAE JPA 2.0 Txn快速回滚,java,google-app-engine,jpa,transactions,Java,Google App Engine,Jpa,Transactions,又一次,我为以前从未发生过的事情发疯。我已经在我的项目中更改了表示层中的一些文件以及它们自己的实体,与数据处理层无关。有人能告诉我为什么下面的代码会导致这个错误日志吗?我的意思是,为什么它看不到我提交了Txn并关闭了EntityManager。 我用粗体表示警告,因为这是问题所在,而不是NullPointerException。NullPointerException是一个结果,查询没有返回任何内容,而教师保持为null,因为事务回滚了,我不知道为什么 String Email = "xyz@x

又一次,我为以前从未发生过的事情发疯。我已经在我的项目中更改了表示层中的一些文件以及它们自己的实体,与数据处理层无关。有人能告诉我为什么下面的代码会导致这个错误日志吗?我的意思是,为什么它看不到我提交了Txn并关闭了EntityManager。 我用粗体表示警告,因为这是问题所在,而不是NullPointerException。NullPointerException是一个结果,查询没有返回任何内容,而教师保持为null,因为事务回滚了,我不知道为什么

String Email = "xyz@xyz.com";
EntityManager em = EMF.get().createEntityManager();
em.getTransaction().begin();
TypedQuery<Teacher> query = em.createQuery("SELECT s FROM Teacher s WHERE s.Email = ?1", Teacher.class);
query.setParameter(1, Email);
Teacher teacher = (Teacher)query.getSingleResult();
teacher.getTeacherInf(); // Lazy Parameter
em.getTransaction().commit();
em.close();
//Lazy Parameter must be fetched before closing. Tried without fetching, same result
最后是错误和警告

2014年9月1日上午5:01:28 com.google.apphosting.utils.servlet.TransactionCleanupFilter handleAbandonedTxns 警告:请求已完成,但未提交或回滚id为1的事务。事务将回滚。 2014年9月1日上午5:01:28 com.google.apphosting.utils.jetty.JettyLogger警告

警告:/Login

java.lang.NullPointerException 位于com.google.appengine.datanucleus.query.QueryEntityPfetchFieldManager.FetchLongFieldQueryEntityPfetchFieldManager.java:74 位于org.datanucleus.identity.IdentityUtils.getApplicationIdentityforResultStrowedTityutils.java:101 位于com.google.appengine.datanucleus.EntityUtils.entityToPojoEntityUtils.java:1011 在com.google.appengine.datanucleus.query.DatastoreQuery$2.applyDatastoreQuery.java:229 位于com.google.appengine.datanucleus.query.DatastoreQuery$2.applyDatastoreQuery.java:226 位于com.google.appengine.datanucleus.query.lazyrult.resolvenextlazyrult.java:96 位于com.google.appengine.datanucleus.query.lazyrult.ResolveAllLazyrult.java:121 位于com.google.appengine.datanucleus.query.lazyrult.sizelazyrult.java:115 位于com.google.appengine.datanucleus.query.StreamingQueryResult.sizeStreamingQueryResult.java:151 位于org.datanucleus.store.query.AbstractQueryResult.toArrayAbstractQueryResult.java:400 java:559 位于org.datanucleus.query.evaluator.JavaQueryEvaluator.executeJavaQueryEvaluator.java:160 位于org.datanucleus.query.evaluator.jpqleevaluator.executejjpklevaluator.java:112 位于com.google.appengine.datanucleus.query.JPQLQuery.performExecutejbqlquery.java:200 位于org.datanucleus.store.query.query.executeQueryQuery.java:1789 位于org.datanucleus.store.query.query.executeWithMapQuery.java:1693 位于org.datanucleus.api.jpa.JPAQuery.getSingleResultJPAQuery.java:232 在servelet.User.Login.UserAuthentication.doPostUserAuthentication.java:48 位于javax.servlet.http.HttpServlet.serviceHttpServlet.java:637 位于javax.servlet.http.HttpServlet.serviceHttpServlet.java:717 位于org.mortbay.jetty.servlet.ServletHolder.handleServletHolder.java:511 位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilterServletHandler.java:1166 在servelet.Filters.GlobalFilter.doFilterGlobalFilter.java:27 位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilterServletHandler.java:1157 位于com.google.appengine.api.socket.dev.DevSocketFilter.doFilterDevSocketFilter.java:74 位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilterServletHandler.java:1157 位于com.google.appengine.tools.development.responseWriterFilter.doFilterResponseWriterFilter.java:127 位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilterServletHandler.java:1157 位于com.google.appengine.tools.development.headerficationfilter.dofilterheaderficationfilter.java:34 位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilterServletHandler.java:1157 在com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilterServeBlobFilter.java:63 位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilterServletHandler.java:1157 位于com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilterTransactionCleanupFilter.java:43 位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilterServletHandler.java:1157 位于com.google.appengine.tools.development.StaticFileFilter.doFilterStaticFileFilter.java:125 位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilterServletHandler.java:1157 位于com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequestDevAppServerModulesFilter.java:366 在com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequestDevAppServerModulesFilter.java:349 位于com.google.appengine.tools.development.DevAppServerModulesFilter.doFilterDevAppServerModulesFilter.java:116 位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilterServletHandler.java:1157 位于org.mortbay.jetty.servlet.ServletHandler.handleServletHandler.java:388 位于org.mortbay.jetty.security.SecurityHandler.handleSecurityHandler.java:216 位于org.mortbay.jetty.servlet.SessionHandler.handleSessionHandler.java:182 在org.mortbay.j handler.ContextHandler.handleContextHandler.java:765 网址:org.mortbay.jetty.webapp.WebAppContext.handleWebAppContext.java:418 在com.google.appengine.tools.development.devappengineewebappcontext.handledevappengineewebappcontext.java:98 位于org.mortbay.jetty.handler.HandlerWrapper.HandlerWrapper.java:152 位于com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handleJettyContainerService.java:491 位于org.mortbay.jetty.handler.HandlerWrapper.HandlerWrapper.java:152 位于org.mortbay.jetty.Server.handleServer.java:326 位于org.mortbay.jetty.HttpConnection.handleRequestHttpConnection.java:542 位于org.mortbay.jetty.HttpConnection$RequestHandler.contentHttpConnection.java:938 位于org.mortbay.jetty.HttpParser.parsenexthtpparser.java:755 位于org.mortbay.jetty.HttpParser.parseAvailableHttpParser.java:218 位于org.mortbay.jetty.HttpConnection.handleHttpConnection.java:404 位于org.mortbay.io.nio.SelectChannelEndPoint.runSelectChannelEndPoint.java:409 位于org.mortbay.thread.QueuedThreadPool$PoolThread.runQueuedThreadPool.java:582

更新:

我做了一些测试,结果如下: 1主键查找。。。没问题,即使是在数据处理层,它也能像魅力一样发挥作用。 2个TypedQuery提供两种错误: 如果实体存在,我会得到上面发布的警告和错误 B如果实体不存在,我会得到一个结果NotFoundException这很正常

但这里的要点是,查询查找实体,并且仅当实体存在时才查找实体,如果没有结果,则会给出ResultNotFoundException


请注意,在这一点上,我愿意尽一切努力来实现这一点。

好吧,我仍然不知道发生了什么,希望得到任何额外的反馈,但似乎只要我删除长ID并将其转换为密钥,尽管另一个实体,同一个项目有很长的主键,所有的工作都很好,查询开始通过像一个魅力。。。无论如何,我希望有更多经验的人能够解释这种行为,因为这一次真的让我着迷了

当我使用一个长原语作为我的Id字段时,我得到了与您报告的完全相同的堆栈跟踪。我所要做的就是把类型改成长类

@Entity
public class Teacher implements Serializable
{
private static final long serialVersionUID = 5426530769458891752L;
@Id
private long ID;
private String FName;
private String LName;
private String Email;
@OneToOne(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
private TeacherInfo teacherInf;
// Constructor & getters & setters ...}