Google 앱 엔진의 데이터 스토어에서 값을 가져 오는 코드는 다음과 같습니다.Quering 데이터 스토어에서 알 수없는 오류가 발생했습니다.
PersistenceManager pm = JDOUtil.get().getPersistenceManager();
Extent extent = pm.getExtent(LeaderBoard.class, true);
Query q = pm.newQuery(extent);
q.setFilter("game =='"+game+"'");
q.setOrdering("time DESC,createdDate DESC");
List<LeaderBoard> leaderBoard = (List<LeaderBoard>) q.execute();
pm.close();
그러나 나는 그것의 나에게 내가 행 아래에 익숙하지 오전 이상한 오류를 제공하려 할 때.
List<LeaderBoard> leaderBoard = (List<LeaderBoard>) q.execute();
아래가 스택 추적입니다. 이것은 언젠가 작동합니다. 하지만 지금은 효과가 없습니다. Google 애플리케이션 엔진 및 jdo를 사용하고 있습니다. 다음은
ERROR :java.lang.ClassCastException: org.datanucleus.query.evaluator.memory.InMemoryFailure cannot be cast to java.lang.Comparable
stackTrace :java.lang.ClassCastException: org.datanucleus.query.evaluator.memory.InMemoryFailure cannot be cast to java.lang.Comparable
at org.datanucleus.query.QueryUtils$3.compare(QueryUtils.java:1317)
at java.util.Arrays.mergeSort(Arrays.java:1446)
at java.util.Arrays.legacyMergeSort(Arrays.java:1356)
at java.util.Arrays.sort(Arrays.java:1345)
at org.datanucleus.query.QueryUtils.orderCandidates(QueryUtils.java:1288)
at org.datanucleus.query.evaluator.JavaQueryEvaluator.ordering(JavaQueryEvaluator.java:471)
at org.datanucleus.query.evaluator.JavaQueryEvaluator.execute(JavaQueryEvaluator.java:220)
at com.google.appengine.datanucleus.query.JDOQLQuery.performExecute(JDOQLQuery.java:153)
at org.datanucleus.store.query.Query.executeQuery(Query.java:1789)
at org.datanucleus.store.query.Query.executeWithArray(Query.java:1666)
at org.datanucleus.store.query.Query.execute(Query.java:1639)
at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:221)
at com.googlecreativelab.dao.LeaderBoardDAO.isTopScore(LeaderBoardDAO.java:68)
at com.googlecreativelab.dao.LeaderBoardDAO.saveTopScore(LeaderBoardDAO.java:26)
at com.googlecreativelab.service.GameDataService.processRequest(GameDataService.java:188)
at com.googlecreativelab.service.GameDataService.doGet(GameDataService.java:290)
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.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:102)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
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 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.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266)
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 com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:447)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:454)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:461)
at com.google.tracing.TraceContext.runInContext(TraceContext.java:703)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:338)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:330)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:458)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
at java.lang.Thread.run(Thread.java:679)
는 리더 클래스
@PersistenceCapable
public class LeaderBoard implements Serializable {
private static final long serialVersionUID = 3671283388721366564L;
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String name;
@Persistent
private Integer avatar;
@Persistent
private String game;
@Persistent
private Integer time;
@Persistent
private Date scoredDate;
//Setter and getters
이며, 또한 내가 쿼리 '에 의해 순서'가 '시간'열에서 같은 값이 때 나는별로 주문하려고에서만 발생하는 오류를 발견 . 예를 들어 데이터 저장소에서 '시간'열의 값이 955 인 두 개의 행이 있습니다. 그런 다음 주문 순서를 수행 할 수 없습니다. 955, 966과 같은 주문 쿼리가 작동하는 경우 희망 나는 이것을 분명히했다 :). 이것은 버그 또는 뭔가인가요? 게임에 전달하는 값이 "실행 됨"
'LeaderBoard' 클래스의 정의를 추가 할 수 있습니까? 또한 '게임'의 가치는 무엇입니까? –
질문을 편집했습니다. – user1774252