可以轻松地使用 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 您可以使用它按名称绑定参数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top