Java Google App Engine Datastore: opérateur 'IN' disponible sur les filtres de requête JDO, comme avec Python?

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

  •  11-09-2019
  •  | 
  •  

Question

Cette page décrit un opérateur 'IN' que peut être utilisé dans GAE Datastore pour comparer un champ à une liste de correspondances possibles, et pas seulement une seule valeur:

Cependant ceci est pour Python. Dans Java (App Engine 1.2.5), en essayant

query.setFilter("someField IN param");

sur mon javax.jdo.query feux 'ne pouvait pas être analysé la portion d'expression: IN param' un JDOUserException.

Est-il possible cela peut être fait?

Était-ce utile?

La solution

La version Python de IN est effectivement mis en œuvre dans le code niveau de l'application (que vous pouvez examiner, car il fait partie de l'App Engine SDK open source): essentiellement, une requête avec un IN comme la vôtre devient requêtes N avec == (où N == len (param)) et les résultats de ces requêtes N sont fusionnées en arrière que le résultat global.

Alors qu'il est sans doute commode d'avoir cette fonctionnalité dans le cadre du code source fourni par Google, il n'y a vraiment pas de valeur ajoutée au-delà de cette commodité, et en particulier il n'y a pas d'avantage les performances WRT il fait juste dans votre propre code. Donc, je ne suis pas surpris que ce tweak mineur était (au moins jusqu'à présent) pas ajouté à la version Java ...

Autres conseils

Pour utiliser l'opérateur IN, j'utilise ceci:

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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top