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

Java 如何在多个参数上动态构建JDO查询,java,google-app-engine,jdo,google-cloud-datastore,Java,Google App Engine,Jdo,Google Cloud Datastore,可以很容易地使用JDO语法查询多个参数,如下所示: //specify the persistent entity you're querying and you filter usign params query = pm.newQuery(MyClass.class, " customer == paramCustomer && date >= paramStartDate && date <=paramEndDate "); // declar

可以很容易地使用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<MyClass>) query.execute(user, startDate, endDate);
不直接的方法是根据过滤器中的参数(以及已声明的参数)来制定执行查询的策略,因此最终会出现许多非常难看的特殊级联if-else语句,以及查询执行的所有可能排列(所有参数,仅第一个、仅第二个、第一个和第二个等):

MyClassList=(List)query.execute(user、startDate、endDate);
我相信这是一项共同的任务,其他人正在以更普遍、更有效的方式完成这项任务


有什么建议吗?

我在方法中找到了解决方案

通过这种方式,我可以动态构建过滤器和param声明,将实际对象加载到一个对象数组中,然后将该数组传递给上述方法


另一个重要的方法是通过名称绑定参数。

请向我们展示同样问题的代码示例。
"customer == paramCustomer && date >= paramStartDate && date <=paramEndDate"
"com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate"
MyClassList = (List<MyClass>) query.execute(user, startDate, endDate);