Java Google App Engine datastore: operatore 'IN' accessibile filtri di query JDO, come con Python?

StackOverflow https://stackoverflow.com/questions/1448677

  •  11-09-2019
  •  | 
  •  

Domanda

Questa pagina descrive un operatore 'IN' che può essere utilizzato in GAE Datastore per confrontare un campo con un elenco di possibili corrispondenze, non solo un singolo valore:

Tuttavia questo è per Python. In Java (App Engine 1.2.5), cercando

query.setFilter("someField IN param");

sul mio javax.jdo.query spara un JDOUserException 'Porzione di espressione non potrebbe essere analizzato: IN param'.

C'è un modo questo può essere fatto?

È stato utile?

Soluzione

La versione di Python di IN è effettivamente implementata in codice a livello di applicazione (che è possibile esaminare in quanto fa parte di App Engine SDK open source): in sostanza, una query con un IN come la tua diventa query N con == (dove N == len (param)) ed i risultati di quelle query N sono fuse indietro come il risultato complessivo.

Mentre è senza dubbio conveniente avere questa funzionalità come parte del codice sorgente fornito da Google, non c'è davvero alcun valore aggiunto al di là di questo vantaggio, e, in particolare, non v'è alcun vantaggio prestazionale WRT solo facendo nel proprio codice. Quindi, non mi stupisce che questo tweak minore è (almeno finora) non aggiunti alla versione Java ...

Altri suggerimenti

Per usare l'operatore IN, io uso questo:

List<Site> query(List<String> searchTerms)
{
    javax.jdo.Query q = pm.newQuery(Site.class);
    q.setFilter("param.contains(siteField)");
    q.declareParameters("java.util.Collection param");
    return (List<Site>)q.execute(searchTerms);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top