[objectify-appengine] Filtering on multiple

55 views
Skip to first unread message

Christophe DA COSTA

unread,
Sep 25, 2015, 2:19:32 PM9/25/15
to objectify-appengine
Hi, 

How can I filter using multiple attributes? (simulating an "AND" 
operation) 


I have tried: 

produits.setProduits(ofy().load().type(Produit.class).filter("idListe in",collectionProduits.getIdListes()).filter("supprime!=",true).list());



This is My Entity:

@Entity
public class Produit implements  Serializable{

private static final long serialVersionUID = xxxxxxxxxxxxxxxxx;

@Id
private Long id;
@Index
private Long idliste;
@Index
private Boolean supprime;
public Produit() {
// TODO Auto-generated constructor stub
}

public Long getIdliste() {
return idliste;
}

public void setIdliste(Long idliste) {
this.idliste = idliste;
}

public Boolean getSupprime() {
return supprime;
}

public void setSupprime(Boolean supprime) {
this.supprime = supprime;
}


When I load my entities I have this critical error :

Uncaught exception from servlet
java.io.IOException: com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: no matching index found.
The suggested index for this query is:
    <datastore-index kind="Produit" ancestor="false" source="manual">
        <property name="idliste" direction="asc"/>
        <property name="supprime" direction="asc"/>
    </datastore-index>

 (through reference chain: com.listecourses.model.CollectionProduits["produits"])
	at com.google.api.server.spi.response.ServletResponseResultWriter.writeValueAsString(ServletResponseResultWriter.java:187)
	at com.google.api.server.spi.response.ServletResponseResultWriter.write(ServletResponseResultWriter.java:74)
	at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:394)
	at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:113)
	at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:71)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	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:125)
	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.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
	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:257)
	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:442)
	at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
	at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:230)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
	at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:234)
	at java.lang.Thread.run(Thread.java:745)
Caused by: com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: no matching index found.
The suggested index for this query is:
    <datastore-index kind="Produit" ancestor="false" source="manual">
        <property name="idliste" direction="asc"/>
        <property name="supprime" direction="asc"/>
    </datastore-index>


Can you help me? 

Nicholas Okunew

unread,
Sep 27, 2015, 3:22:14 AM9/27/15
to objectify...@googlegroups.com
You require indexes to support filters across multiple fields, the exception tells you what you need to do. Google 'Appengine datastore indexes' and read the docs, everything is explained.
--
You received this message because you are subscribed to the Google Groups "objectify-appengine" group.
To unsubscribe from this group and stop receiving emails from it, send an email to objectify-appen...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages