2010-12-04 45 views
1

串在我的谷歌應用程序引擎項目查詢我得到了一個意外的異常:AppEngine上:ClassCastException異常與冷

com.google.gwt.user.server.rpc.UnexpectedException:服務法「公共抽象的java.lang .String org.learnjapanese.client.NewAccount.login(java.lang.String,java.lang.String)拋出java.lang.IllegalArgumentException拋出一個意外的異常:java.lang.ClassCastException:無法拋出java.lang.Character到com.google.appengine.api.datastore.Key

at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:378) 
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:581) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:188) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224) 

這是我的JPA代碼:

@Entity 
public class Test { 
@Id 
String id; 
} 

而且這是在應用程序代碼:

EntityManager manager = EMF.get().createEntityManager(); 

Query q = manager.createQuery("select x from Test x where id = '12'"); 
List l = q.getResultList(); // No problem here 

q = manager.createQuery("select x from Test x where id = '1'"); 
l = q.getResultList(); // java.lang.ClassCastException occurs here. 

事實證明,與長度爲1的字符串的查詢導致該異常,同時與長度爲2的字符串不。任何人都可以解釋這裏發生了什麼?有沒有解決方法?

+1

當你這樣做會發生什麼? `「從Test x中選擇x,其中id = \」1 \「」` – thejh 2010-12-04 22:41:36

回答

0

在Java中,用單引號括起來的單個字符被解釋爲char字面量。看起來這是在您的聲明中使用'1'時發生的情況。堆棧跟蹤正在討論一個java.lang.Character的實例,這就是如果字符被自動裝箱就會得到的。聽起來就像你正在使用的框架中的一個錯誤。