1

電子メール ID に基づいてユーザーのリストを取得するために JDO を使用してクラウド エンドポイント API を作成しています。emailId を @Named パラメータとして Api メソッドに渡し、それをクエリ フィルタに追加すると、「式の一部を解析できませんでした: @gmail.com」というエラー メッセージが表示されます。

@Api (name="MyAppname", version="v1")
public class PersonEndpoint {

public Person validate(@Named("emailId") String emailId, @Named("role") String role){
.......

PersistenceManager pm=getPersistenceManager();
Query q = pm.newQuery(Person.class);
q.setFilter(" email == "+emailId+" && role == "+role);

try{
    person=(Person)q.execute();
}finally{
    q.closeAll();
    pm.close();
}

return person;
}

上記のAPIを呼び出すと、以下のエラーがスローされます

javax.jdo.JDOUserException: Portion of expression could not be parsed: @gmail.com && role == collector
at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:519)
at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:230)

メールなどの特殊文字を含むパラメーターをクエリ フィルターに渡すにはどうすればよいですか?

4

1 に答える 1

2

テキスト文字列にテキスト文字列を埋め込まないでください。代わりに、パラメータを定義しパラメータ値を に提供しますexecute()

Query q = pm.newQuery(Person.class);
q.setFilter("emailId == :theEmail && role == :theRole");
Map<String, String> paramValues = new HashMap();
paramValues.put("theEmail", myEmailParam);
paramValues.put("theRole", myRoleParam);
List<Person> persons = (List<Person>)q.executeWithMap(paramValues);

これらはすべて、JDO 仕様の例とDataNucleus JDO のドキュメントで定義されています。それらを読むことを強くお勧めします

于 2013-05-30T12:33:47.110 に答える