對於iOS項目,我使用GAE(Java堆棧)存儲用戶的設備令牌並使用它發送推送通知。GAE:比較執行JDO查詢時返回錯誤結果的字符串值
我有一個Device實體,它包含幾個字段,包括String類型的「appVersion」字段。該數據庫包含了一些設備與版本1和一些與版本2
當我運行一個JDO查詢找到與「appVersion」所有設備等於2返回預期的結果,但是當我做相同的版本1該查詢不返回任何結果,儘管存在與此條件匹配的實體。
這是代碼:
javax.jdo.Query query = _pm.newQuery(Device.class, "appVersion == appVersionParams");
query.declareParameters(String.class.getName()+" appVersionParams");
List<Device> results = (List<Device>) query.execute(message.getAppVersion());
我驗證了幾次,與第1版設備的實體被正確地存儲(類型爲字符串,其中包含正確的,修剪值,這的確完全匹配的參數我通過)。
我第一次在開發環境中遇到過這個問題,所以我刪除了本地數據庫並創建了測試實體並再次運行查詢 - 這次它返回了版本1和2的預期結果。但是在我重新啓動服務器之後再次返回版本1的錯誤結果(同時使用版本2)。希望這只是本地開發環境中的一個bug。我將它部署到生產環境,它只返回4個實體(有幾千個匹配這個條件) - 所有實體都以相同的方式/ API存儲。
我也嘗試從JDO切換到低級別的API來獲取實體,但我得到了相同的奇怪行爲。這是它的代碼:
Query q = new Query("Device");
q.addFilter("appVersion", FilterOperator.EQUAL, message.getAppVersion());
我要瘋了這是怎麼回事?
嘗試在查詢中使用'this.appVersion'。 – Viruzzo 2012-02-10 14:31:33
謝謝,我在本地嘗試了它,並將它部署到GAE,但結果相同。當我期待數千人時,我只有少數實體回來了。 – 2012-02-10 15:16:31
你確定你堅持正確嗎?我的意思是,如果你不過濾,那麼你是否按預期得到它們? – Viruzzo 2012-02-10 16:35:39