Как добавить более 1 фильтра к запросу диспетчера персистентности в Java Google App Engine? - PullRequest
0 голосов
/ 01 июля 2011

Я использую сервлеты Java для разработки приложения Google App Engine.Мне нужно написать запрос с более чем 1 условием в предложении where.Закомментированная строка ниже дает мне ошибку query_parsing.Есть ли способ добавить более одного условия в предложении where?

String query = "select from " + Human.class.getName();
query += " where name == '" + request.getParameter("name") + "'";
//query += " and lastname == '" + request.getParameter("lastname") + "'";
List<Human> humans = (List<Human>) pm.newQuery(query).execute();

Я знаю, что это возможно с запросами JDO, такими как ниже.Тем не менее, моя версия отличается.Я использую объект String, чтобы написать запрос и затем выполнить его с помощью диспетчера постоянства (см. Выше).

Query query = pm.newQuery(Employee.class);
query.setFilter("lastName == lastNameParam");
query.setOrdering("hireDate desc");
query.declareParameters("String lastNameParam");

1 Ответ

1 голос
/ 02 июля 2011

В вашем первом фрагменте кода, я считаю, что проблема заключается в слове 'и', которое должно быть '&&'. Чтобы иметь несколько фильтров, как во втором фрагменте, вы также должны использовать оператор '&&'.

String query = "select from " + Human.class.getName();
query += " where name == '" + request.getParameter("name") + "'";
query += " && lastname == '" + request.getParameter("lastname") + "'";
List<Human> humans = (List<Human>) pm.newQuery(query).execute();

или

Query query = pm.newQuery(Employee.class);
query.setFilter("lastName == lastNameParam && name == nameParam");
query.setOrdering("hireDate desc");
query.declareParameters("String lastNameParam");
query.declareParameters("String nameParam");
...