java - JDOFatalUserException : Illegal argument (on GAE J, 但不在开发系统上)

标签 java google-app-engine google-cloud-datastore jdo

我正在 Google App Engine/Java 上开发一个应用程序。 在我的开发环境中,应用程序运行良好,数据存储和检索成功。但是,在上传到应用程序引擎时,我不断收到错误“javax.jdo.JDOFatalUserException:非法参数”。从堆栈跟踪来看,这似乎是在我调用 (List query.execute()).size() 时发生的。 相关的堆栈跟踪是。

2012-11-22 23:34:08.512
[s~qalmadev1/1.363360558551053190].<stderr>: javax.jdo.JDOFatalUserException: Illegal argument

W 2012-11-22 23:34:08.516
[s~qalmadev1/1.363360558551053190].<stderr>:    at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:488)

W 2012-11-22 23:34:08.516
[s~qalmadev1/1.363360558551053190].<stderr>:    at org.datanucleus.api.jdo.JDOAdapter.getApiExceptionForNucleusException(JDOAdapter.java:1107)

W 2012-11-22 23:34:08.516
[s~qalmadev1/1.363360558551053190].<stderr>:    at com.google.appengine.datanucleus.query.QueryExceptionWrappers$2.get(QueryExceptionWrappers.java:72)

W 2012-11-22 23:34:08.516
[s~qalmadev1/1.363360558551053190].<stderr>:    at com.google.appengine.datanucleus.query.RuntimeExceptionWrappingIterator.hasNext(RuntimeExceptionWrappingIterator.java:103)

W 2012-11-22 23:34:08.516
[s~qalmadev1/1.363360558551053190].<stderr>:    at com.google.appengine.datanucleus.query.LazyResult.resolveAll(LazyResult.java:120)

W 2012-11-22 23:34:08.516
[s~qalmadev1/1.363360558551053190].<stderr>:    at com.google.appengine.datanucleus.query.LazyResult.size(LazyResult.java:115)

W 2012-11-22 23:34:08.516
[s~qalmadev1/1.363360558551053190].<stderr>:    at com.google.appengine.datanucleus.query.StreamingQueryResult.size(StreamingQueryResult.java:151)

W 2012-11-22 23:34:08.516
[s~qalmadev1/1.363360558551053190].<stderr>:    at com.xxx.xxx.appengine.server.CreateEventServlet.doPost(CreateEventServlet.java:115)

我的 CreateEventServlet 中的第 115 行是下面代码中的“if()”行

Query query = pm.newQuery("select from com.xxx.xxx.appengine.User "
        + "where key == :userid");
        List<User> result = (List<User>) query.execute(userid);
        if (result != null && result.size() > 0) { // Line 115
            user = result.get(0);
            USER_VALID = true;
        }

最佳答案

发现问题了。

Query query = pm.newQuery("select from com.xxx. xxx.appengine.User "
    + "where key == :userid");

在查询中,“userid”指的是通过KeyFactory.keyToString()实现的字符串。 使用 KeyFactory.stringToKey() 将字符串转换回键解决了该问题。

关于java - JDOFatalUserException : Illegal argument (on GAE J, 但不在开发系统上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13521010/

相关文章:

google-app-engine - Google App Engine Python 2.7 SSL 停止工作

java - 无法在数组中定位元素

java - 我如何在java中将数字放在一起?

google-app-engine - 在 Google Cloud Endpoints 中登录 Facebook

python - webapp2 的 get() 方法什么时候接受额外的参数?

node.js - 从 Google 数据存储区获取所有实体

google-app-engine - 如何在 Google Cloud Datastore 中嵌入大型数组而不达到 1MB 大小限制?

java - 如何使用具体的调度程序启动 @Scheduled 方法?

java - for循环的二进制计数器

google-app-engine - 使用 Google App Engine 服务帐户的远程 API?