如何在多个参数上动态构建JDO查询

可以使用JDO语法轻松查询多个参数,如下所示:

//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) query.execute(user, startDate, endDate); 

使用filter以编程方式构建字符串很简单:

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

与params声明的另一个str :::

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

什么是不立即提出一个策略来执行查询取决于filter中的哪些参数(并已被声明),所以你最终得到一些非常丑陋和临时的级联if-else语句与所有查询执行的可能排列(所有参数,只有第一个,只有第二个,第一个和第二个……):

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

我确信这是一项共同的任务,而其他人正在以更加通用和有效的方式开展这项工作。

有什么建议吗?

我在方法query.executeWithArray找到了一个解决方案

这样我就可以动态地构建filter和参数声明,将实际对象加载到一个对象数组中,然后传递给上面提到的方法。

另一个重要的方法是executeWithMap您可以使用它来按名称绑定参数。