【问题标题】:How to dynamically build JDO Queries on multiple parameters如何在多个参数上动态构建 JDO 查询
【发布时间】:2010-10-30 11:06:34
【问题描述】:

可以很容易地使用 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);

我确信这是一项常见的任务,并且其他人正在以更通用和更有效的方式执行此任务。

有什么建议吗?

【问题讨论】:

    标签: java google-app-engine jdo google-cloud-datastore


    【解决方案1】:

    我在方法query.executeWithArray找到了解决办法

    这样我可以动态构建过滤器和参数声明,将实际对象加载到对象数组中,然后将其传递给上述方法。

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

    【讨论】:

    • 能否给我们看一下代码示例,遇到了同样的问题。
    猜你喜欢
    • 2023-01-10
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    相关资源
    最近更新 更多