В этом вопросе. Я решил проблему запроса Google Datastore для получения материалов пользователем (com.google.appengine.api.users.User) следующим образом:
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'
поддерживается JDOQL , и он отлично работает в других полях (строковые типы и перечисления). Другая странная вещь заключается в том, что при просмотре средства просмотра данных на панели инструментов движка приложения поле «автор» сохраняется как тип пользователь , но значение равно «user@gmail.com», а затем снова, когда я установите его как параметр (вышеописанный случай, который работает нормально) Я объявляю параметр как String, затем передаю экземпляр User (user), который сериализуется с простым toString()
(я полагаю).
Кто-нибудь есть идеи?