2011-01-22 55 views
0

得到像這樣JDO querys符合或GAE

public class A 
private String a; 
private String b; 
.. 
.. 
.. 

我怎樣寫一個JDO查詢選擇所有匹配要麼關鍵字== A或關鍵字== b

在A對象實體A

的完整代碼看起來是這樣的:

Query q = pm.newQuery(SELECT FROM A WHERE a == keyword || b == keyword ORDER BY date DESC"); 

     List<A> results = (List<A>)q.execute(keyword); 

這個代碼不給任何錯誤,但沒有給出任何結果。刪除||部分給出結果。

謝謝

回答

2

您不能對兩個不同的字段執行OR操作。下面是從docs片段:

在JDOQL字符串語法,可以單獨 多個濾波器與|| (邏輯「或」)和& &(邏輯「和」), ,但請記住||。只能使用 時其過濾器 分隔所有具有相同字段 的名稱。換句話說,||只有法律 在情況下的過濾器,在 分離後能夠合併成一個單一的 包括()過濾器:

解決此
// legal, all filters separated by || are on the same field 
Query query = pm.newQuery(Employee.class, 
          "(lastName == 'Smith' || lastName == 'Jones')" + 
          " && firstName == 'Harold'"); 

// not legal, filters separated by || are on different fields 
Query query = pm.newQuery(Employee.class, 
          "lastName == 'Smith' || firstName == 'Harold'"); 

一種方式是存儲你的A和B在列表中。如果您有一個名爲foo的項目列表,您可以在foo = keyword中進行查詢,如果foo中的任何項目匹配,則會將該對象返回到結果中。你不說太多什麼a和b,所以我不知道這是否會爲你工作或不:)

更新

public class Example { 
    String firstName; 
    String lastName; 
    List<String> allNames; 

    public Example(String first, String last){ 
     firstName = first; 
     lastName = last; 
     allNames = new ArrayList<String>(); 
     allNames.add(first); 
     allNames.add(last); 
    } 
} 

有了類似的東西,你然後可以做一個查詢,其中「allNames =='Smith'|| allNames =='Jones'」。

+0

嗨,感謝您的評論。我不確定關注這個列表,a和b是字符串,我想匹配的關鍵字也是如此。我想完全按照這個非法的例子來做,對你的解決方案來說可能是這樣嗎? – 2011-01-23 10:47:50