2011-07-21 27 views
1

我不知道我在這裏弄錯了什麼?它抱怨說:「只有當所有過濾器都是'等於'過濾器時才支持連接。」當查詢被執行時。我該如何解決這個問題?爲什麼錯誤「僅當所有過濾器均爲'等於'過濾器時才支持連接。」

Query query = pm.newQuery(ItemInfo.class); 

if (lastSyncDate != null) { 
    query.declareVariables("DeviceInfo deviceInfo"); 
    query.setFilter("this.toDevices.contains(deviceInfo) && " + 
    "deviceInfo.phoneNumber == numberParam && createdDate > lastSyncDateParam"); 
    query.declareParameters("String numberParam, java.util.Date lastSyncDateParam"); 
    map.put("lastSyncDateParam", lastSyncDate); 
} else { 
    query.declareVariables("DeviceInfo deviceInfo"); 
    query.setFilter("this.toDevices.contains(deviceInfo) && deviceInfo.phoneNumber == numberParam"); 

    query.declareParameters("String numberParam"); 
} 
map.put("numberParam", "123456"); 
query.setOrdering("createdDate desc"); 

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true") 
public class ItemInfo { 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Long id; 

    @Persistent 
    private String number; 

    @Persistent 
    private List<DeviceInfo> toDevices; 
} 

回答

0

App Engine的數據存儲是不相關的,並且不支持連接,您使用了一個參考模型的字段隱含做哪個。相反,您應該使用給定的電話號碼獲取實體或實體,並使用這些實體的鍵過濾結果數據集,從而消除隱含的連接。

+0

如何以這種方式做子查詢? – angelokh

+0

@angelokh這不是一個子查詢 - 只需對給定電話號碼的記錄執行標準查詢即可。然後,對於每個匹配記錄,對引用該記錄的記錄執行查詢。 –

相關問題