我正在使用Google App Engine / Java开发应用程序。 在我的开发环境中,应用程序工作正常,数据存储和检索成功。但是,在上传到app引擎时,我不断收到错误“javax.jdo.JDOFatalUserException:Illegal argument”。从堆栈跟踪中,这似乎发生在我调用(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;
}
答案 0 :(得分:1)
发现问题。
Query query = pm.newQuery("select from com.xxx. xxx.appengine.User "
+ "where key == :userid");
在查询中,“userid”引用通过KeyFactory.keyToString()实现的String。 使用KeyFactory.stringToKey()将String转换回键解决了这个问题。