2012-02-10 3 views
0

iOSプロジェクトでは、GAE(Javaスタック)を使用してユーザーのデバイストークンを格納し、プッシュ通知を送信しています。GAE:JDOクエリの実行時にfalse結果を返す文字列値を比較します。

私は、Stringタイプの "appVersion"フィールドを含むいくつかのフィールドを含むDeviceエンティティを持っています。データベースにはバージョン1のデバイスとバージョン2のデバイスが含まれています。

"appVersion"が2に等しいすべてのデバイスを見つけるためにJDOクエリを実行すると、期待される結果が返されますが、バージョン1クエリは結果を返しませんが、この条件に一致するエンティティがあります。

この

はコードです:私は、(タイプはStringで、右が含まれているバージョン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()); 

I )。

私は最初にDev環境でこの問題が発生したので、ローカルDBを削除してテストエンティティを作成し、再度クエリを実行しました。今回はバージョン1と2の期待される結果を返しました。しかし、バージョン1の間違った結果を返しました(バージョン2でうまくいっている間)。それはローカルのdev envのバグだったと思っていました。私はそれを実稼働環境に配備し、4つのエンティティしか返しませんでした(この条件に一致する数千もありません)。すべてのエンティティは同じ方法/ APIで保存されていました。

また、JDOから低レベルのAPIに切り替えてエンティティをフェッチしようとしましたが、同じ奇妙な動作があります。これはそのコードです:

Query q = new Query("Device"); 
q.addFilter("appVersion", FilterOperator.EQUAL, message.getAppVersion()); 

私はここでナッツに行っています。何が起こっているのですか?

+0

クエリで 'this.appVersion'を試してみてください。 – Viruzzo

+0

ありがとう、私はそれをローカルで試して、GAEにも展開しましたが、結果は同じです。私が何千ものことを期待しているとき、私はほんの数のエンティティしか持っていない –

+0

正しく保存してもよろしいですか?つまり、フィルタリングしないと、期待どおりにすべてを取得できますか? – Viruzzo

答えて

0

この問題は、serialVersionUIDを正しく使用しない永続的なエンティティ構造/スキーマに対する変更に関連していました。詳細については、Viruzzoのコメントを参照してください。

関連する問題