Appengine:查询中的ClassCastException,其字符串为leng

时间:2010-12-04 22:37:40

标签: google-app-engine jpa

在我的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则不会。谁能解释一下这里发生了什么?有解决方法吗?

1 个答案:

答案 0 :(得分:0)

在Java中,用单引号括起来的单个字符被解释为char文字。看起来这就是在语句中使用'1'时发生的情况。堆栈跟踪正在讨论java.lang.Character的实例,如果自动装箱,您将获得该实例。听起来像你正在使用的框架中的一个错误。