0

このフィルタがエンティティを返さないのはなぜですか? 私はそれを解決することはできません。他のフィルターは問題なく動作します。

プロパティが文字列のリストに設定されたエンティティを作成します。List も Collection であるため、データストアはそれを受け入れる必要があります (そして、私はそれを受け入れると思います *)。

Key aliceKey = KeyFactory.createKey("User", user.getEmail());
Entity alice = new Entity(aliceKey);
List<String> roles = new ArrayList<String>();
roles.add("admin");
roles.add("user");
alice.setProperty("role", roles);

それをデータストアに保存します。

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.put(alice);

次にクエリを作成します。 FilterOperator.IN は、FilterPredicate コンストラクターの 3 番目の引数 (rolesList) に Iterable を必要とします。

List<String> rolesList = new ArrayList<String>();
rolesList.add("admin");

Filter propertyFilter =  new FilterPredicate("role", FilterOperator.IN, rolesList);
Query q = new Query("User").setFilter(propertyFilter);
List<Entity> c = datastore.prepare(q).asList(FetchOptions.Builder.withDefaults());

if(c.size()==0)
    response.getWriter().println("nothing");
for (int i = 0; i < c.size(); i++) {
    response.getWriter().println(c.get(i).toString());
}

プロパティの値は正しい形式で表示されていますか? これはalice.toString()の出力です

Alice: <Entity [User("test@example.com")]:
    role = [admin, zone admin]
>
4

1 に答える 1