如何在多个参数上动态构建 JDO 查询
-
06-09-2019 - |
题
可以轻松地使用 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);
使用过滤器以编程方式构建字符串非常简单:
"customer == paramCustomer && date >= paramStartDate && date <=paramEndDate"
另一个带有 params 声明的字符串:
"com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate"
不是立即提出一个策略来执行查询,具体取决于过滤器中的参数(并且已声明),因此您最终会得到许多非常丑陋且临时级联的 if-else 语句,其中包含所有查询执行的可能排列(所有参数,仅第一个,仅第二个,第一个和第二个等...):
MyClassList = (List<MyClass>) query.execute(user, startDate, endDate);
我确信这是一项常见的任务,并且其他人正在以更通用和更有效的方式完成它。
有什么建议吗?
解决方案
我在方法中找到了解决方案 query.executeWithArray
这样我就可以动态构建过滤器和参数声明,并将实际对象加载到对象数组中,然后将其传递给上面提到的方法。
另一个重要的方法是 executeWithMap
您可以使用它按名称绑定参数。
不隶属于 StackOverflow