この質問で、次のようにGoogleデータストアにクエリを実行してユーザー(com.google.appengine.api.users.User)ごとに取得する問題を解決しました:
User user = userService.getCurrentUser();
String select_query = "select from " + Greeting.class.getName();
Query query = pm.newQuery(select_query);
query.setFilter("author == paramAuthor");
query.declareParameters("java.lang.String paramAuthor");
greetings = (List<Greeting>) query.execute(user);
上記は問題なく動作しますが、少しいじった後、より複雑なクエリを作成する必要があるため、この構文はあまり実用的ではないことに気付きました.通常、フィルタは文字列変数として渡されますが、簡単にするためにインラインで作成されています):
User user = userService.getCurrentUser();
String select_query = "select from " + Greeting.class.getName();
Query query = pm.newQuery(select_query);
query.setFilter("author == '"+ user.getEmail() +"'");
greetings = (List<Greeting>) query.execute();
field = 'value'
この構文がJDOQLでサポートされていて、他のフィールド (文字列型と列挙型) で正常に機能する場合でも、明らかにこれは機能しません。もう1つの奇妙な点は、アプリエンジンダッシュボードのデータビューアーを見ると、「作成者」フィールドがタイプユーザーとして保存されていますが、値は「user@gmail.com」であり、パラメーターとして設定すると再び(上記の場合は正常に動作します)パラメーターを文字列として宣言してから、単純なシリアル化されたユーザー(ユーザー)のインスタンスを渡します(toString()
推測します)。
誰でもアイデアはありますか?