質問

の質問をhref="https://stackoverflow.com/questions/764337/how-to-fetch-data-by-user-from-google-datastore">

:次のようにユーザー(com.google.appengine.api.users.User)によるものを取得するために、Googleのデータストアに問い合わせます
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するによってサポートされており、それが他のフィールド(文字列型と列挙型)で正常に動作します。他の奇妙なことは、アプリエンジンダッシュボードにデータビューアを見て「作者」フィールドは時に再びタイプのユーザーのとして格納されますが値が「user@gmail.com」であり、されていることです私は、単純なtoString()(私は推測)で連載されますユーザー(利用者)のインスタンスを停止渡す文字列としてパラメータを宣言しています(つまり、上記の場合は、正常に動作します)のパラメータとして設定します。

誰でも任意のアイデア?

役に立ちましたか?

解決

クエリ言語で文字列置換を使用すると、の常にの悪い考えです。それはあなたの環境をユーザ打破すると混乱のためにあまりにも簡単だし、それは、エンコーディングの問題、などのコレクション全体を紹介します。

以前のパラメータ置換のアプローチで間違っていましたか?私の知る限り承知しているとして、それはすべてをサポートし、任意の構文解析の問題を回避し。限り渡す引数の数を知ることに問題が行くように、あなたは、引数の数は不明でクエリを実行するためにQuery.executeWithMapまたはQuery.executeWithArrayを使用することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top