0

このページでは、GAE Datastore で使用できる 'IN' 演算子について説明します。これは、単一の値だけでなく、可能な一致のリストに対してフィールドを比較します。

ただし、これは Python 用です。Java (App Engine 1.2.5) で、

query.setFilter("someField IN param");

私のjavax.jdo.queryでJDOUserException「式の一部を解析できませんでした: IN param」が発生します。

これを行う方法はありますか?

4

2 に答える 2

2

IN 演算子を使用するには、次のようにします。

List<Site> query(List<String> searchTerms)
{
    javax.jdo.Query q = pm.newQuery(Site.class);
    q.setFilter("param.contains(siteField)");
    q.declareParameters("java.util.Collection param");
    return (List<Site>)q.execute(searchTerms);
}
于 2011-05-13T07:04:18.777 に答える
1

のPythonバージョンは、IN実際にはアプリケーションレベルのコードで実装されています(オープンソースのApp Engine SDKの一部であるため、調べることができます)。基本的に、似たINようなクエリはN個のクエリになります==(ここで、N == len(param ))そしてそれらのN個のクエリの結果は全体的な結果としてマージされます。

この機能をGoogleが提供するソースコードの一部として使用することはほぼ間違いなく便利ですが、この便利さを超える付加価値は実際にはありません。特に、独自のコードで実行するだけではパフォーマンス上の利点はありません。したがって、このマイナーな調整が(少なくともこれまでのところ)Javaバージョンに追加されていないことに驚かないでください...

于 2009-09-19T15:45:50.037 に答える