GAE(Google App Engine/J)で検索処理を行う時は
PersistenceManagerという良く分からないマネージャーでQueryオブジェクトを生成して検索を行う。
この時生成されるQueryのオブジェクトにはFilterという条件指定をする事が出来るんだけど、
複数の条件を指定すると
何故か上手くいかない。
例えば
条件が一つの場合、
Query query = pm.newQuery(Hoge.class);
query.setFilter("hoge == 'hoge'");
とやる。
条件を二つにする時に
Listでaddする感覚で
Query query = pm.newQuery(Hoge.class);
query.setFilter("hoge == 'hoge'");
query.setFilter("fuga == 'fuga'");
とやったら、
「hoge==hoge」が
全 然 機 能 し な い
ちなみにANDを追記して、
Query query = pm.newQuery(Hoge.class);
query.setFilter("hoge == 'hoge' &&");
query.setFilter("fuga == 'fuga'");
でもダメ。
デバックしてみたら、発行されているクエリのwhere以降が
where fuga == fuga
で終わってる
これ(Filter)はもしかしたら1つで固定なのかと思って
Query query = pm.newQuery(Hoge.class);
query.setFilter("hoge == 'hoge' && fuga == 'fuga'");
とか書いてみたら
あっさりいけた。
ちなみに不等式を使った複数プロパティの条件付検索は、
仕様的に無理だそうです。
以下参考。
GAEドキュメント
☆以下引用☆
不等式フィルタが使用できるのは 1 つのプロパティに限られる
クエリが不等式フィルタ(<、<=、>=、>)を使用できるのは、すべてのフィルタにわたって 1 つのプロパティに限られます。
☆引用終わり☆
つまり今回の場合
Query query = pm.newQuery(Hoge.class);
query.setFilter("hoge >= 'hoge' && fuga <= 'fuga'");
は出来ないと思われる。