2009-06-22 6 views
4

Nach the Queries and Indexes doc können Sie eine Abfrage effektiv identisch gehen (soweit ich das beurteilen kann), dies zu:Warum erhalte ich einen Cast-Fehler in meiner Query mit JDO in Google App Engine?

PersistenceManager pm = PMF.get().getPersistenceManager(); 
try { 
    Query q = pm.newQuery(App.class); 
    q.setOrdering("name desc"); 

    try { 
     results = (ArrayList<App>) q.execute(); 
    } finally { 
     q.closeAll(); 
    } 
} finally { 
    pm.close(); 
} 

Allerdings bin ich auf der results = (ArrayList<App>) q.execute(); Linie die folgende Störung zu erhalten:

java.lang.ClassCastException: org.datanucleus.store.appengine.query.StreamingQueryResult cannot be cast to java.util.ArrayList 
    at com.killerrobots.AppSite.MainServlet.getApplications(MainServlet.java:66) 
    at com.killerrobots.AppSite.MainServlet.doGet(MainServlet.java:26) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:693) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) 
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
    at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) 
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:306) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) 
    at org.mortbay.jetty.Server.handle(Server.java:313) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) 
    at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442) 

Irgendwelche Ideen?

Antwort

10

Sie das Ergebnis execute zu einem List<whatever> werfen können, aber nicht speziell ein ArrayList<whatever>, zu dem ist, was Ihr Code versucht, zu tun! Warum nicht einfach List, die Abstraktion verwenden, auf die du wirken darfst, anstatt ArrayList, die konkrete Implementierung, die du hast, die nicht erlaubt ist?

+1

Mist ... Ich wusste, dass ich den Code zu lange gesucht habe. Verpasste das Offensichtliche. Vielen Dank. –

Verwandte Themen