Java Google App Engine-Datenspeicher: 'IN' Operator auf JDO Abfragefiltern, wie mit Python?

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

  •  11-09-2019
  •  | 
  •  

Frage

Diese Seite beschreibt eine 'IN' Betreiber erklären, dass kann in GAE-Datenspeicher verwendet werden, um ein Feld mit einer Liste der möglichen Übereinstimmungen zu vergleichen, nicht nur ein einziger Wert:

Dies ist jedoch für Python. In Java (App Engine 1.2.5), versuchen

query.setFilter("someField IN param");

auf meinem javax.jdo.query feuert eine JDOUserException 'könnte Teil des Ausdrucks nicht analysiert werden: IN param'.

Gibt es eine Möglichkeit, dies kann getan werden?

War es hilfreich?

Lösung

Die Python-Version von IN tatsächlich in Application-Level-Code implementiert ist (was man untersuchen kann, da sie Teil der Open-Source-App Engine SDK ist): im Wesentlichen, eine Abfrage mit einem IN wie das Ihre wird N-Abfragen mit == (wo N == len (param)) und die Ergebnisse dieser N-Abfragen werden als das Gesamtergebnis zusammengeführt zurück.

Während es wohl praktisch ist diese Funktion zu haben als Teil von Google bereitgestellten Quellcode, gibt es wirklich keinen Mehrwert jenseits dieser Informationen, insbesondere gibt es keinen Leistungsvorteil WRT in Ihrem eigenen Code tut es einfach. Also, ich bin nicht überrascht, dass diese geringfügige zwicken war (zumindest bisher) nicht hinzugefügt, um die Java-Version ...

Andere Tipps

Um den IN-Operator zu verwenden, verwende ich diese:

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top