在这个问题上,我解决了查询 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();
显然,即使JDOQL 支持field = 'value'
这种语法并且它在其他字段(字符串类型和枚举)上也能正常工作,这也不起作用。另一个奇怪的事情是,查看应用引擎仪表板中的数据查看器,“作者”字段存储为用户类型,但值为“user@gmail.com”,然后当我将其设置为参数时(上面的情况很好)我将参数声明为一个字符串,然后传递一个用户(用户)的实例,该实例用一个简单的序列化(我猜)。toString()
有人知道吗?