Question

On peut facilement utiliser la syntaxe JDO pour interroger sur plusieurs paramètres comme suit:

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

Il est facile de construire une chaîne avec programmation du filtre:

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

et un autre strign avec la déclaration params:

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

Ce qui est pas immédiat est de trouver une stratégie pour exécuter la requête en fonction du params sont dans le filtre (et ont été déclarés), si vous vous retrouvez avec un certain nombre de vraiment laid et ad hoc en cascade si-else déclarations avec toutes les permutations possibles de l'exécution de la requête (tous les params, seule la première, la deuxième, premier et deuxième etc ...):

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

Je suis sûr que ce soit une tâche et une personne commune est en train de faire autre d'une manière plus générale et efficace.

Toute suggestion?

Était-ce utile?

La solution

J'ai trouvé une solution dans la méthode query.executeWithArray

De cette façon, je peux construire des filtres et la déclaration de param dynamiquement une charge vers le haut des objets réels dans un tableau d'objet qui est ensuite transmis à la méthode mentionnée ci-dessus.

Une autre méthode importante est executeWithMap wich vous pouvez utiliser pour lier des paramètres par nom.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top