Java Google App Engine almacén de datos: operador 'IN' disponible en filtros de consulta JDO, como con Python?

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

  •  11-09-2019
  •  | 
  •  

Pregunta

Esta página describe un operador 'IN' que se puede utilizar en GAE almacén de datos para comparar un campo con una lista de posibles coincidencias, no sólo un único valor:

Sin embargo, esto es para Python. En Java (App Engine 1.2.5), tratando

query.setFilter("someField IN param");

en mi javax.jdo.query dispara un JDOUserException 'Porción de expresión no se pudo analizar: EN parámetro'.

¿Hay alguna manera esto se puede hacer?

¿Fue útil?

Solución

La versión de Python de IN se llevan a la práctica el código de nivel de aplicación (que puede examinar, ya que es parte de la App Engine SDK de código abierto): en esencia, una consulta con una IN como la suya se convierte en N consultas con == (donde N == len (param)) y los resultados de las consultas N se fusionan de nuevo como el resultado global.

Si bien es discutible conveniente tener esta funcionalidad como parte del código fuente proporcionado por Google, no hay realmente ningún valor añadido más allá de esta ventaja, y en particular, no hay ninguna ventaja de rendimiento WRT sólo lo hace en su propio código. Por lo tanto, no me sorprende que este pequeño ajuste era (al menos hasta ahora) no se añade a la versión Java ...

Otros consejos

Para utilizar el operador IN, yo uso esto:

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top