Pregunta

Se puede utilizar fácilmente la sintaxis JDO para consultar en varios parámetros de la siguiente manera:

//specify the persistent entity you're querying and you filter usign params
query = pm.newQuery(MyClass.class, " customer == paramCustomer && date >= paramStartDate && date <=paramEndDate ");

// declare params used above
query.declareParameters("com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate"); 

//pass the object declared as params
MyClassList = (List<MyClass>) query.execute(user, startDate, endDate);

Es sencillo de construir mediante programación una cadena con el filtro:

"customer == paramCustomer && date >= paramStartDate && date <=paramEndDate"

y otro strign con la declaración params:

"com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate"

Lo que no es inmediato es llegar a una estrategia para ejecutar la consulta en función de la params están en el filtro (y han sido declarados), por lo que terminan con un número de cascada realmente feo y ad-hoc if-else declaraciones con todas las permutaciones posibles de la ejecución de la consulta (todos los parametros, sólo el primero, el segundo, primero y segundo, etc ...):

MyClassList = (List<MyClass>) query.execute(user, startDate, endDate);

Estoy seguro de que esta es una tarea común y alguien más lo está haciendo de una manera más general y eficiente.

Cualquier sugerencia?

¿Fue útil?

Solución

he encontrado una solución en el método query.executeWithArray

De esta manera puedo construir filtros y declaración PARAM dinámicamente una carga de hasta los objetos reales en una matriz de objeto que se pasa entonces con el método mencionado anteriormente.

Otro método importante es executeWithMap los que se podrá utilizar para enlazar parámetros por nombre.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top