0

私は App Engine を使い始めたばかりで、データストアに固有の名前を持つ Person オブジェクトを追加する非常に単純なアプリを作成しようとしました。これはオブジェクトです:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Person {

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
@Unique
private String name;

public Person(String nameIn){
    this.name = nameIn;
}

public Long getId(){
    return this.id;
}

public void setId(Long idIn){
    this.id = idIn;
}

}

このサーブレットは、データストアでオブジェクトを永続化する役割を果たします。ただし、その前に、メソッドdoesUserExist(String)は同じ「名前」フィールドを持つオブジェクトが存在するかどうかを確認します。

@SuppressWarnings("serial")
public class PersonDatastoreServlet extends HttpServlet {

private static final String PARAM_NAME = "name";
private PersistenceManager pmf = PMF.get().getPersistenceManager();

public void doGet(HttpServletRequest req, HttpServletResponse response)
        throws IOException {

        String name = req.getParameter(PARAM_NAME);
        PrintWriter printWriter  = response.getWriter();

        try{

            if(!doesUserExist(name)) {
                Person p = new Person(name);
                pmf.makePersistent(p);

                response.setContentType("text/html");
                printWriter.println("<h1>"+p.getId()+"</h1>");
            }
            else {
                response.setContentType("text/html");
                printWriter.println("<p>User already exists</p>");
            }   
        }
        catch(Exception e) {
            throw new IOException();
        }
        finally{
            pmf.close();
        }
    }

private boolean doesUserExist(String nameIn) {

    Query q = pmf.newQuery(Person.class);
    q.setFilter("name == lastNameParam");
    q.declareParameters("String lastNameParam");

    String name = nameIn;

    try{
        List<Person> list = (List<Person>) q.execute(name);

        if (list.isEmpty()){
            return false;
        }
        else return true;
    }
    finally{
        q.closeAll();
    }
}

}

テイクは非常に簡単に見えますが、うまくいきません。リクエストを処理するフォームがあります。アプリを初めて実行すると、オブジェクトが正常に作成されて永続化されますが、別の名前の別のオブジェクトを追加するたびに、エラーが発生します

Error: Server Error

The server encountered an error and could not complete your request.
If the problem persists, please report your problem and mention this error message and the query that caused it.

クエリが問題の原因であることを示していますが、クエリの何が問題なのかがわかります。誰でも助けてもらえますか?

4

0 に答える 0