-1

電子メール ID に基づいてユーザーのリストを取得するために JDO を使用してクラウド エンドポイント API を作成しています。電子メール ID を @Named パラメーターとして電子メールに渡し、それをクエリ フィルターに追加すると、「クエリの解析中に予期しない式の型が発生しました。GAE でサポートされていない変数 (電子メール)」というエラー メッセージが表示されます。

参考までに、gae のバージョンは 1.8 です

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

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

    PersistenceManager pm=getPersistenceManager();
    Query q = pm.newQuery(Person.class);

    q.setFilter(" email == emailParam && role == "+role);
    q.declareParameters("String emailParam");

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

    return person;
}

}

何か提案はありますか?

ここに Person クラスがあります

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Person {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
    @Persistent
private String emailId;
    @Persistent
private String role;
    <getters and setters here>
}

検証 API を呼び出したときに表示される例外

javax.jdo.JDOFatalUserException: Unexpected expression type while parsing query. Variables not supported by GAE (email)
at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:498)
at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:252)
4

3 に答える 3

1

「 email 」を参照するクエリを実行しようとしましたが、これはクエリのパラメータとして宣言されておらず、フィールドでもありませんPerson。その結果、クエリが無効であるという例外が発生します。おそらくあなたのクエリは

"emailId == emailParam && role == "+role
于 2013-05-30T09:55:03.337 に答える
-2

メールを emailId に変更しましたが、api メソッドに渡されるように emailId を使用しているため、現在は emailParam を使用していません。したがって、コードは次のようになります

public Person validate(@Named("emailId") String emailId, @Named("role") String role){
     Query q = pm.newQuery(Person.class);
    q.setFilter(" email == "+emailId+" && role == "+role);
            person=(Person)q.execute();

}

メール ID の @ が原因で、別のエラーが表示されるようになりました。このようなパラメータをクエリに渡すにはどうすればよいでしょうか?

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)
于 2013-05-30T10:54:00.877 に答える