检查Objectify多态查询中是否存在属性

时间:2014-02-27 09:42:34

标签: google-app-engine objectify

我的基类A具有XYZ个子类型。

我只需查询A的子类型子集,例如仅XYZ个子类型。

要做到这一点,因为Objectify加载器.type()方法不接受多种类型,我添加

q.filter("^i in", types);

到我的查询,其中^i是Objectify添加到A(基类)类的属性,它用于处理polimorphic查询,types包含XYZ类名。它完美地运作:我可以获得所需子类型的实体。

现在假设我的Z子类具有status属性(不是A类的属性)。当我尝试同时过滤^istatus属性时,我总是得到空结果。

例如,我希望获得A个子类型YZ的所有实体,但只有Z属性的status个实体等于"active"。 我按以下方式构建了我的查询:

ObjectifyService.ofy().load().type(A.class)
    .filter("^i in", Arrays.asList(new String[] {"Y", "Z"})
    .filter("status", "active")
    .list();

这将返回一个空列表。如果我删除了status过滤器,则会按预期返回XZ个实体。如果查询仅按Z类型进行过滤,则status过滤器效果很好。

由于我需要YZ个实体,我需要一种方法来过滤status属性,因为状态不存在或等于“有效”:不是Z的类型的第一个子句,第二个是thoose的类型。

你有什么建议吗?感谢

0 个答案:

没有答案