Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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
Google app engine GAE Java-尝试检索对象时出现空指针异常_Google App Engine_Google Cloud Datastore_Jpa 2.0_Gae Eclipse Plugin - Fatal编程技术网

Google app engine GAE Java-尝试检索对象时出现空指针异常

Google app engine GAE Java-尝试检索对象时出现空指针异常,google-app-engine,google-cloud-datastore,jpa-2.0,gae-eclipse-plugin,Google App Engine,Google Cloud Datastore,Jpa 2.0,Gae Eclipse Plugin,我是GAE发展的新手。 对我来说,使用jpa插入到数据存储中工作正常,但检索没有发生 下面是一个在用户尝试登录时对其进行身份验证的方法 public boolean loginUser(User user) { EntityManagerFactory emf = Persistence .createEntityManagerFactory("SOAApp"); EntityManager mgr = emf.createEntityManager()

我是GAE发展的新手。 对我来说,使用jpa插入到数据存储中工作正常,但检索没有发生

下面是一个在用户尝试登录时对其进行身份验证的方法

public boolean loginUser(User user) {

    EntityManagerFactory emf = Persistence
            .createEntityManagerFactory("SOAApp");
    EntityManager mgr = emf.createEntityManager();
    boolean login=false;
    Query query=mgr.createQuery("select u from User u where u.userName=:uid and u.password=:pwd");

    query.setParameter("uid", user.getUserName());
    query.setParameter("pwd",user.getPassword());
    query.setMaxResults(1);

    try {
        user=(User) query.getSingleResult();
        System.out.println("user : "+user.getName());
        if(user!=null)  {
            System.out.println("logged in...");
            login=true;
        }
    }
    catch(Exception e) {
        e.printStackTrace();
    }
    finally {
        mgr.close();
    }
    return login;
}
但是,当我试图通过传递一个具有有效用户名和密码的用户对象来执行该方法时,会出现以下错误

java.lang.NullPointerException
at com.google.appengine.datanucleus.query.QueryEntityPKFetchFieldManager.fetchIntField(QueryEntityPKFetchFieldManager.java:70)
at org.datanucleus.identity.IdentityUtils.getApplicationIdentityForResultSetRow(IdentityUtils.java:93)
at com.google.appengine.datanucleus.EntityUtils.entityToPojo(EntityUtils.java:1009)
at com.google.appengine.datanucleus.query.DatastoreQuery$2.apply(DatastoreQuery.java:228)
at com.google.appengine.datanucleus.query.DatastoreQuery$2.apply(DatastoreQuery.java:225)
at com.google.appengine.datanucleus.query.LazyResult.resolveNext(LazyResult.java:96)
at com.google.appengine.datanucleus.query.LazyResult.resolveAll(LazyResult.java:121)
at com.google.appengine.datanucleus.query.LazyResult.size(LazyResult.java:115)
at com.google.appengine.datanucleus.query.StreamingQueryResult.size(StreamingQueryResult.java:151)
at org.datanucleus.store.query.Query.executeQuery(Query.java:1808)
at org.datanucleus.store.query.Query.executeWithMap(Query.java:1693)
at org.datanucleus.api.jpa.JPAQuery.getSingleResult(JPAQuery.java:231)
at com.soa.managers.UserManager.loginUser(UserManager.java:63)
at com.soa.servlets.LoginServlet.doPost(LoginServlet.java:48)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:383)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
2012年11月3日下午3:25:02 com.google.appengine.tools.development.LocalResourceFileServlet doGet

第63行 [位于com.soa.managers.UserManager.loginUser(UserManager.java:63)] 是“user=(user)query.getSingleResult();”


请帮助我

获取nullpointerexception的原因是getSingleResult方法返回null。因为您使用了(用户)query.getSingleResult(),null值的类型转换引发异常

<?xml version="1.0" encoding="UTF-8"?>
<datastore-indexes  autoGenerate="true">
    <datastore-index kind="HABERLER" ancestor="false" source="manual">
        <property name="__key__" direction="desc"/>
    </datastore-index>

我认为数据存储中并没有相关的用户,所以您得到了异常

获取nullpointerexception的原因是getSingleResult方法返回null。因为您使用了(用户)query.getSingleResult(),null值的类型转换引发异常

<?xml version="1.0" encoding="UTF-8"?>
<datastore-indexes  autoGenerate="true">
    <datastore-index kind="HABERLER" ancestor="false" source="manual">
        <property name="__key__" direction="desc"/>
    </datastore-index>
我认为数据存储中并没有相关的用户,所以您得到了异常


<?xml version="1.0" encoding="UTF-8"?>
<datastore-indexes  autoGenerate="true">
    <datastore-index kind="HABERLER" ancestor="false" source="manual">
        <property name="__key__" direction="desc"/>
    </datastore-index>
HABERLER是表名。写下您的表名,而不是哈伯勒。然后在WEB-INF目录中创建datastore-indexes.xml文件。然后将上述代码复制到此文件中


HABERLER是表名。写下您的表名,而不是哈伯勒。然后在WEB-INF目录中创建datastore-indexes.xml文件。然后将上述代码复制到此文件中

还在搜索吗

我也有同样的问题,我的实体用户有一个名为userId的primaryKey,类型为“int”。现在我把它改为“Long”,我所有的问题和警告都消失了!也许这对你有帮助

我期待着收到你的来信

问候,, 斯蒂芬还在搜索吗

我也有同样的问题,我的实体用户有一个名为userId的primaryKey,类型为“int”。现在我把它改为“Long”,我所有的问题和警告都消失了!也许这对你有帮助

我期待着收到你的来信

问候,,
Stephan

请确保实体的密钥类型有效,如下所述:


您得到的异常很可能与密钥问题有关。

请确保您的实体的密钥类型有效,如下所述:


您得到的异常很可能与关键问题有关。

数据库中存在用户。我可以让他登录,方法是直接传递主键,比如-user=mgr.find(user.class,user.getId());(我已硬编码(预先设置)用户对象的id值。请使用此查询更改查询,query query=mgr.createQuery(“从用户u中选择u”);query.getResultList();我已尝试过相同的操作,但遇到相同的错误:(请帮助我…非常感谢您的回复。我不明白您为什么会遇到这个异常。对不起,伙计。我的项目的业务逻辑几乎结束了,这是我唯一的困境…当我尝试使用本地mysql的普通核心java项目(而不是google web应用程序项目)时,相同的代码工作得非常完美(不是google cloud sql)…我无法理解发生了什么,有人请帮助我:(感谢@mucayufa占用您的时间…数据库中存在用户。我可以让他登录,直接传递主键,如-User=mgr.find(User.class,User.getId());(我已经硬编码(预设)用户对象的id值。请使用此查询更改查询,query query=mgr.createQuery(“从用户u中选择u”);query.getResultList();我已尝试过相同的操作,但遇到相同的错误:(请帮助我…非常感谢您的回复。我不明白您为什么会遇到这个异常。对不起,伙计。我的项目的业务逻辑几乎结束了,这是我唯一的困境…当我尝试使用本地mysql的普通核心java项目(而不是google web应用程序项目)时,相同的代码工作得非常完美(不是谷歌云sql)…我无法理解发生了什么,有人请帮助我:(感谢@mucayufa占用您的时间…对于表中存在的用户,我得到了相同的错误。但是对于dest存在的实体,它抛出-
code
javax.persistence.NoResultException:没有查询结果:从用户u中选择,其中u.userName=?1和u.password=?2,除了如何创建自动创建ID的索引之外与mysql中的auto_increment一样,对于表中存在的用户,我得到了相同的错误。但是对于dest存在的实体,它抛出-
code
javax.persistence.NoResultException:没有查询结果:从用户u中选择,其中u.userName=?1和u.password=?2,除了如何创建自动创建ID li的索引之外在mysql中实现自动增量。。。