Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用包含筛选器的JDO查询(ClassCastException)_Java_Google App Engine_Jdo_Classcastexception - Fatal编程技术网

Java 使用包含筛选器的JDO查询(ClassCastException)

Java 使用包含筛选器的JDO查询(ClassCastException),java,google-app-engine,jdo,classcastexception,Java,Google App Engine,Jdo,Classcastexception,我很难理解查询中带有“contains”过滤器的JDO。 我在谷歌应用引擎开发者页面上的链接上工作 当我用字符串列表查询时,每件事都非常有效 字符串JDO: Query q=pm.newQuery( “从以下人员中选择:p1.包含(favoriteFood)订单(按favoriteFood,年龄”); q、 执行(Arrays.asList(“Vogon Grandmothers”、“Pie”); 然而,当我尝试用同样的方法处理整数时,我得到了一个例外 整数JDO的列表: Query q=pm

我很难理解查询中带有“contains”过滤器的JDO。 我在谷歌应用引擎开发者页面上的链接上工作

当我用字符串列表查询时,每件事都非常有效

字符串JDO:

Query q=pm.newQuery(
“从以下人员中选择:p1.包含(favoriteFood)订单(按favoriteFood,年龄”);
q、 执行(Arrays.asList(“Vogon Grandmothers”、“Pie”);
然而,当我尝试用同样的方法处理整数时,我得到了一个例外

整数JDO的列表:

Query q=pm.newQuery(
“从以下人员中选择:p1.包含(favoriteNumber)订单(按favoriteNumber、年龄”);
q、 执行(Arrays.asList(42,99));
java.lang.ClassCastException:java.util.Arrays$ArrayList不能转换为java.lang.Integer

整数数组JDO:

Query q=pm.newQuery(
“从以下人员中选择:p1.包含(favoriteNumber)订单(按favoriteNumber、年龄”);
q、 执行(新整数[]{42,99});
[Ljava.lang.Integer;无法强制转换为java.lang.Integer

使用所有GAE源文件更新

TestStuffServlet.java

teststuff包;
导入java.io.IOException;
导入java.util.array;
导入java.util.LinkedList;
导入javax.servlet.http.*;
@抑制警告(“串行”)
公共类TestStuffServlet扩展了HttpServlet{
公共无效数据集(HttpServletRequest请求、HttpServletResponse响应)
抛出IOException{
LinkedList personsWithFavoriteNumbers=Person.getPersonsWithFavoriteNumbers(Arrays.asList(1234));
分别为setContentType(“应用程序/json”);
resp.getWriter().println(具有FavoriteNumber的人员);
}
}
Person.java

teststuff包;
导入java.util.LinkedList;
导入java.util.List;
导入javax.jdo.PersistenceManager;
导入javax.jdo.Query;
导入javax.jdo.annotations.PersistenceCapable;
导入javax.jdo.annotations.Persistent;
@持久的
公共阶层人士{
@持久的
私有字符串名称;
@持久的
私有整数;
公共人物(字符串名称、整数favoriteNumber){
this.name=名称;
this.favoriteNumber=favoriteNumber;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共整数getFavoriteNumber(){
返回favoriteNumber;
}
公共void setFavoriteNumber(整数favoriteNumber){
this.favoriteNumber=favoriteNumber;
}
公共字符串toString(){
返回this.name+“”+this.favoriteNumber.toString();
}
公共静态布尔值savePerson(Person-personToSave){
布尔saveSuccessful=false;
PersistenceManager pm=PMF.get().getPersistenceManager();
试一试{
pm.makePersistent(personToSave);
saveSuccessful=true;
}最后{
pm.close();
}
返回成功;
}
公共静态LinkedList GetPersonswithFavoriteNumber(列出FavoriteNumber){
LinkedList PersonWithFavoriteNumber=新建LinkedList();
PersistenceManager pm=PMF.get().getPersistenceManager();
Query q=pm.newQuery(Person.class);
q、 setFilter(“:p1.contains(favoriteNumber)”);
试一试{
列表结果=(列表)q.execute(FavoriteNumber);
//List results=(List)q.execute(新整数[]{23333});
如果(!results.isEmpty()){
个人(p:结果){
//过程结果g
具有偏好号码的人员。添加(p);
}
}否则{
//处理“无结果”案件
}
}最后{
q、 closeAll();
}
返回具有FavoriteNumber的人员;
}
}
堆栈跟踪

HTTP错误500

访问/teststuff时出现问题。原因:

    java.util.Arrays$ArrayList cannot be cast to java.lang.Integer
Caused by:    
java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.lang.Integer
    at com.google.appengine.datanucleus.TypeConversionUtils$8.apply(TypeConversionUtils.java:161)
    at com.google.appengine.datanucleus.TypeConversionUtils$8.apply(TypeConversionUtils.java:156)
    at com.google.appengine.datanucleus.TypeConversionUtils.pojoValueToDatastoreValue(TypeConversionUtils.java:810)
    at com.google.appengine.datanucleus.query.DatastoreQuery.addLeftPrimaryExpression(DatastoreQuery.java:1131)
    at com.google.appengine.datanucleus.query.DatastoreQuery.handleContainsOperation(DatastoreQuery.java:969)
    at com.google.appengine.datanucleus.query.DatastoreQuery.addExpression(DatastoreQuery.java:830)
    at com.google.appengine.datanucleus.query.DatastoreQuery.addFilters(DatastoreQuery.java:739)
    at com.google.appengine.datanucleus.query.DatastoreQuery.compile(DatastoreQuery.java:248)
    at com.google.appengine.datanucleus.query.JDOQLQuery.performExecute(JDOQLQuery.java:158)
    at org.datanucleus.store.query.Query.executeQuery(Query.java:1789)
    at org.datanucleus.store.query.Query.executeWithArray(Query.java:1666)
    at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:243)
    at teststuff.Person.getPersonsWithFavoriteNumbers(Person.java:66)
    at teststuff.TestStuffServlet.doGet(TestStuffServlet.java:14)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:368)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:351)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:485)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

尝试
q.execute(Arrays.asList(“42”);
q.execute(Arrays.asList(new Integer(42));
我已尝试传递…List aNumber=Arrays.asList(new Integer(42));得到同样的错误。我从未使用过JDO。但是在阅读之后,它看起来像是
p1
对象接受
String
,并且您试图传递
原语int
。如果您使用
“42”
应该可以工作。q.execute(42);有效,这是一个整数。但我需要将多个整数作为列表或数组或任何有效的东西进行传递。能否添加更多代码和异常的
stacktrace
?更多信息将有助于了解发生了什么。