На this вопрос, который я решил проблему запросов Google Datastore, чтобы получить материал пользователем (com.google.appengine.api.users.User), как это:Google Datastore проблема с запросом на * пользователя * типа
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'
равен supported by JDOQL, и он отлично работает в других полях (типы строк и перечисления). Другая странная вещь заключается в том, что, глядя на средство просмотра данных в приборной панели приложения, поле «автор» сохраняется как тип User, но это значение «[email protected]», а затем снова, когда я устанавливаю его как параметр (в случае выше, который работает отлично) Я объявляю параметр как строку, затем передавая экземпляр пользователя (пользователя), который сериализуется с простым toString()
(я думаю).
У вас есть идеи?
Привет, спасибо за ваш ответ - это показывает, в чем проблема с заменой параметров (задан другой вопрос, так как это немного другая проблема) – JohnIdol
забыли ссылку -> http://stackoverflow.com/questions/935762/how- to-dynamic-build-jdo-queries-on-multiple-parameters – JohnIdol
Обновлен мой ответ. –