通过实体中的列表对象化查询过滤器包含搜索参数

在一个应用程序中,我有一个实体,其中包含其他实体的列表(假设一个事件持有分配的员工列表)

使用物化 - 我需要找到一个特定员工分配给的所有事件。

有没有一种基本的方法来过滤查询,如果它包含参数 - 与查询相反的类型

...快速伪代码

findAll(Employee employee) {
  ...
  return ofy.query(Event.class).filter("employees.contains", employee).list();
}

任何帮助将不胜感激


我在看过这个http://groups.google.com/group/objectify-appengine/browse_thread/thread/77ba676192c08e20之后尝试过滤(“员工”,员工) - 但不幸的是,这会返回一个空列表

目前我正在做一些非常低效的事情 - 通过每个事件,遍历员工,并将其添加到新列表中,如果它包含给定的员工只是为了让事情有效 - 我知道这不是正确的


让我补充一件事,

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

“员工”和“事件”与“业务”作为父项位于同一个实体组中

我正在使用的实际查询如下

ofy.query(Event.class).ancestor(businessKey).filter("employees", employee).list();

不幸的是,这仍然返回一个空的列表 - 是否有在那里的祖先(关键)搞砸了过滤器?


解决方案,员工领域没有正确编入索引。

我添加了datastore-indexes文件来创建一个复合索引,但最初测试的是我在雇员字段索引之前添加的一个值,这是我做的一些愚蠢的事情 - 只是在“business”字段和“员工”领域固定了一切。 数据存储索引文件看起来并不必要,在删除它之后再次尝试一切正常。


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

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

要么

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

你也可以创建一个关系实体,但是如果你只是对相对较少的值进行过滤,通常将set属性放在一个实体或另一个实体上更容易。

然后按照您的描述过滤:

ofy.query(Event.class).filter("employees", employee).list()

要么

ofy.query(Employee.class).filter("events", event).list()

列表属性应该持有目标实体的密钥。 如果你将一个实体传递给filter()方法,Objectify会理解你想用键来过滤。


例如:/ *********************************************** **** /

@实体

@Cache

公共课新闻{

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

//我的朋友可以看到我的消息,exemele:friend_list.add(id_f1); friend_list.add(id_f2); friend_list.add(id_f3);

//要对“friend_list”进行操作,必须对其进行索引

}

/ ******************* /

公共新闻(Long id_f){

    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); 

//要过滤一个列表,在要过滤的字段名称后面添加“IN”。

// here ==> .filter(“friend_list in”,friend_id);

//如果friend_list包含“id_friend”==>查询返回值

    .........

}

链接地址: http://www.djcxy.com/p/58573.html

上一篇: objectify query filter by list in entity contains search parameter

下一篇: Optional properties when deserializing a DataContract/Serializable mish