在我的Google App Engine项目中,我遇到了意外的异常:
com.google.gwt.user.server.rpc.UnexpectedException:服务方法'public abstract java.lang.String org.learnjapanese.client.NewAccount.login(java.lang.String,java.lang.String)throws 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的String的查询会导致异常,而长度为2的String则不会。谁能解释一下这里发生了什么?有解决方法吗?
答案 0 :(得分:0)
在Java中,用单引号括起来的单个字符被解释为char文字。看起来这就是在语句中使用'1'
时发生的情况。堆栈跟踪正在讨论java.lang.Character
的实例,如果自动装箱,您将获得该实例。听起来像你正在使用的框架中的一个错误。