Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 实体包含搜索参数中按列表对象化查询筛选器_Google App Engine_Gwt_Requestfactory_Objectify - Fatal编程技术网

Google app engine 实体包含搜索参数中按列表对象化查询筛选器

Google app engine 实体包含搜索参数中按列表对象化查询筛选器,google-app-engine,gwt,requestfactory,objectify,Google App Engine,Gwt,Requestfactory,Objectify,在一个应用程序中,我有一个包含其他实体列表的实体(比如一个包含指定员工列表的事件) 使用objectify-我需要找到指定给特定员工的所有事件 如果一个查询包含一个参数,那么有没有一种基本的方法来过滤这个查询呢 。。。快速伪码 findAll(Employee employee) { ... return ofy.query(Event.class).filter("employees.contains", employee).list(); } 任何帮助都将不胜感激 在看到这个之后

在一个应用程序中,我有一个包含其他实体列表的实体(比如一个包含指定员工列表的事件)

使用objectify-我需要找到指定给特定员工的所有事件

如果一个查询包含一个参数,那么有没有一种基本的方法来过滤这个查询呢

。。。快速伪码

findAll(Employee employee) {
  ...
  return ofy.query(Event.class).filter("employees.contains", employee).list();
}
任何帮助都将不胜感激


在看到这个之后,我试着只做过滤器(“employees”,employee)——但不幸的是,这返回了一个空列表

目前,我正在做一些非常低效的事情——遍历每个事件,迭代员工,并将他们添加到一个新列表中(如果其中包含给定的员工),只是为了得到一些有效的东西——我知道这是不对的


让我补充一点

上面的查询实际上不是它,我只是使用它,因为我不认为这会有什么不同

员工和事件位于同一实体组中,业务作为父实体

我使用的实际查询如下

ofy.query(Event.class).ancestor(businessKey).filter("employees", employee).list();
不幸的是,这仍然返回一个空列表-是否有祖先(键)在那里打乱了过滤器


解决方案中,员工字段的索引不正确


我添加了数据存储索引文件来创建一个复合索引,但最初是在对employees字段进行索引之前对我添加的值进行测试,这是我在做的一件愚蠢的事情——只是在“business”字段和“employees”字段上有一个索引就可以修复所有问题。数据存储索引文件似乎不是必需的,在删除它并重试后,一切正常。

通常,您可以通过以下两种方式之一执行此操作:

Put a property of Set<Key<Employee>> on the Event

list属性应包含目标实体的键。如果将实体传递给filter()方法,Objectify将理解您希望改为按键进行筛选。

示例: /***************************************************/

@实体

@缓存

公共类新闻{

@Id Long id;
String news ;
@Index List<Long> friend_list = new ArrayList<Long>();

}

这正是我正在做的,但由于某些原因,我无法让它工作。2件事——我用的不是一套,而是一个清单——这会有什么不同吗?此外,它们位于以业务为父级的实体组中,因此查询实际上是y.query(Event.class).祖先(businessKey).filter(“employees”,employees).list()-但这返回的是一个空列表-我不认为在其中包含祖先键的查询会弄乱任何东西-列表和祖先都不应该有区别-尽管祖先()+过滤器()可能需要一个复合索引。您是否已为employees属性编制了@索引?这是必要的,即使有复合索引。@vandus,因为肖恩·克里斯蒂似乎没有回答,你成功做到了吗?我不能。不,我最终放弃了,再也没有用它工作过。抱歉:/n如果您保存了具有索引列表属性的实体,则可以根据该值进行筛选。它起作用了。也许您添加了@Index,但没有重新保存实体?
ofy.query(Event.class).filter("employees", employee).list()
ofy.query(Employee.class).filter("events", event).list()
@Id Long id;
String news ;
@Index List<Long> friend_list = new ArrayList<Long>();
    List<Long> friend_id = new ArrayList<Long>();
    friend_id.add(id_f);

Query<Nesw> query = ofy().load().type(News.class).filter("friend_list in",friend_id).limit(limit); 
    .........