Domanda

Si può facilmente utilizzare la sintassi JDO per interrogare su diversi parametri come segue:

//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);

E 'semplice per costruire una stringa di codice con il filtro:

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

e un altro strign con la dichiarazione params:

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

Quello che non è immediato è quello di elaborare una strategia per l'esecuzione della query a seconda di quale params sono nel filtro (e sono stati dichiarati), così si finisce con una serie di cascata veramente brutto e ad-hoc if-else affermazioni con tutte le possibili permutazioni di esecuzione di query (tutti i params, solo il primo, il secondo, primo e secondo, ecc ...):

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

Sono sicuro che questo è un compito comune e qualcun altro sta facendo in un modo più generale ed efficiente.

Ogni suggerimento?

È stato utile?

Soluzione

Ho trovato una soluzione nel metodo query.executeWithArray

In questo modo posso costruire filtri e dichiarazione param dinamicamente un carico fino gli oggetti reali in un array di oggetto che viene quindi passato al metodo di cui sopra.

Un altro metodo importante è executeWithMap wich è possibile utilizzare per associare i parametri per nome.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top