GAE-Java-JDO を使用して、リスト内の特定の要素の値をフィルタリングすることは可能ですか?
機能するもの
通常、私は次のようになります。
@PersistenceCapable
class A {
String field1;
String field2;
// id, getters and setters
}
次に、簡単なクエリを作成します。
Query q = pm.newQuery(A.class, "field1 == val");
q.declareParameters("String val");
List<A> list = new ArrayList<A>((List<A>) q.execute("foo"));
私が望むもの
上記は正常に動作します。しかし、私が欲しいのは、リストに格納されているすべてのフィールドです:
@PersistenceCapable
class AA {
ArrayList<String> fields;
// id, getters and setters
}
次に、リスト内の特定のフィールドに対してクエリを実行できます。
int index = 0;
Query q = pm.newQuery(A.class, "fields.get(index) == val");
q.declareParameters("int index, String val");
List<A> list = new ArrayList<A>((List<A>) q.execute(index, "foo"));
しかし、これは例外をスローします:
org.datanucleus.store.appengine.query.DatastoreQuery$UnsupportedDatastoreFeatureException:
Problem with query
<SELECT FROM xxx.AA WHERE fields.get(index) == val PARAMETERS int index, String val,>:
Unsupported method <get> while parsing expression:
InvokeExpression{[PrimaryExpression{strings}].get(ParameterExpression{ui})}
GAE-JDO のドキュメントを読んだ感想は、これは不可能だということです。
「プロパティ値はアプリケーションによって提供される必要があります。他のプロパティを参照したり、計算したりすることはできません」
それで...何かアイデアはありますか?
前もって感謝します!