2009-06-01 9 views
4

一つ次のように簡単に複数のパラメータに照会するJDO構文を使用することができます。動的に複数のパラメータにJDOのクエリを構築する方法

"customer == paramCustomer && date >= paramStartDate && date <=paramEndDate" 

//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); 

これは、プログラムのフィルタ文字列を構築するために簡単です

と、もう1つはparams宣言を付けたものです。

"com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate" 

何もありませんフィルタに含まれるパラメータ(宣言されている)に応じて、クエリを実行するための戦略を思いつくことになります。そのため、実際には醜く、アドホックなカスケードif-elseステートメントがクエリ実行の可能な順列(すべてのparams、最初、唯一の二、などの第一及び第二の...):

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

私は、これは一般的な作業であり、他の誰かがそれをやっていると確信していますより一般的で効率的な方法です。

提案がありますか?

答えて

5

Iは方法query.executeWithArray

中の溶液に、私は、その後、上述したメソッドに渡されるオブジェクトのアレイに動的にロードアップ実際のオブジェクトフィルタとPARAM宣言を構築することができ、この方法を発見しました。

もう1つの重要な方法は、パラメータを名前でバインドするために使用できるexecuteWithMapです。

+1

同じ問題を抱えてコードサンプルを表示してください。 –

関連する問題