2010-12-04 4 views
1

の文字列を含むクエリでClassCastExceptionが私が予期しない例外が発生しましたjava.lang.ClassCastException:java.lang.Characterをキャストできません。 com.google.appengine.api.datastore.KeyのAppEngine:</p> <p>com.google.gwt.user.server.rpc.UnexpectedException::サービスメソッドの公開抽象java.langで私はGoogle App EngineプロジェクトでLENG

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. 

それは長さ2を持つStringにはないながら、長さ1の文字列を持つクエリは、例外が発生することが判明しました。誰でもここで何が起こっているのか説明できますか?回避策はありますか?

+1

これを行うとどうなりますか? '' test xからxを選択してください。id = \ "1 \" " – thejh

+0

それが解決すれば、例外は発生しません。文字列リテラルは単一引用符で囲まれているため、奇妙です(http://download.oracle.com/docs/cd/E14571_01/apirefs.1111/e13946/ejb3_langref.html#ejb3_langref_lit) – bspoel

+0

アプリエンジンの問題:http://code.google.com/p/datanucleus-appengine/issues/detail?id=21の問題は非常に似ています – bspoel

答えて

0

Javaでは、単一引用符で囲まれた1文字は、charリテラルとして解釈されます。これは、あなたの明細書に'1'を使用したときに起こっているようです。スタックトレースは、java.lang.Characterのインスタンスについて話しています。これは、charが自動ボックス化された場合に得られるものです。あなたが使用しているフレームワークのバグのように聞こえる。

関連する問題