2009-06-01 42 views
4

人們可以很容易地使用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<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" 

什麼是no t immediate是提出一個執行查詢的策略,這取決於哪些參數在過濾器中(並且已經被聲明),所以最終會產生一些非常醜陋和特別的級聯if-else語句,查詢執行的可能的排列(所有的參數,可以只有第一,只是第二,第一和第二等):

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

我相信這是一個共同的任務和別人是這樣做的一個更一般和有效的方式。

有什麼建議嗎?

回答

5

我發現在該方法中query.executeWithArray

這樣我可以建立過濾器和param聲明動態的負載成對象的陣列,然後將其傳遞到上述方法的實際對象的溶液中。

另一個重要的方法是executeWithMap你可以用它來按名稱綁定參數。

+1

可以向我們展示代碼示例,弄亂了相同的問題。 – 2016-10-14 08:57:14