2012-11-22 16 views
1

我正在開發Google App Engine/Java上的應用程序。 在我的開發環境中,應用程序正常工作,數據存儲和檢索成功。但是,上傳到應用程序引擎時,我不斷收到錯誤「javax.jdo.JDOFatalUserException:Illegal argument」。從堆棧跟蹤,這似乎發生在我調用(List query.execute())。size()時。 相關的堆棧跟蹤是。JDOFatalUserException:非法參數(在GAE J上,但不在開發系統上)

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) 

線115在我CreateEventServlet是 「如果()」 中的代碼下面

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

您是否明確將實體名稱設置爲'com.xxx.xxx.appengine.User'?如果不是在查詢中使用'select from user'。 –

+0

我個人會打印出嵌套的異常,這是真正的例外,它會告訴你實際上有問題的線(在公開源代碼插件代碼中) – DataNucleus

回答

1

線發現這個問題。

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

在查詢中, 「用戶ID」 稱爲字符串通過KeyFactory.keyToString實現()。 使用KeyFactory.stringToKey()將字符串轉換回密鑰解決了問題。

+0

您必須將此標記爲接受的答案。閱讀[這裏](http://stackoverflow.com/about)如何做到這一點。 –

相關問題