Google app engine 检查Objectify查询中是否存在属性

Google app engine 检查Objectify查询中是否存在属性,google-app-engine,objectify,Google App Engine,Objectify,我有一个基类a,它有X、Y和Z子类型 我只需要查询a的子类型的子集,如仅X,或Y和Z子类型 为此,由于Objectify loader.type()方法不接受多个类型,我添加了一个 q.filter(“^i in”,类型) 对于我的查询,其中,^i是Objectify添加到A(基本)类的一个属性,用于处理多形查询,类型包含X,Y,Z类名称。它工作得很好:我可以得到所需子类型的实体 现在假设我的Z子类有一个status属性(它不是a类的属性)。当我尝试同时筛选^i和状态属性时,我总是得到空结果 例

我有一个基类
a
,它有
X
Y
Z
子类型

我只需要查询
a
的子类型的子集,如仅
X
,或
Y
Z
子类型

为此,由于Objectify loader
.type()
方法不接受多个类型,我添加了一个

q.filter(“^i in”,类型)

对于我的查询,其中,
^i
是Objectify添加到
A
(基本)类的一个属性,用于处理多形查询,
类型包含
X
Y
Z
类名称。它工作得很好:我可以得到所需子类型的实体

现在假设我的
Z
子类有一个
status
属性(它不是
a
类的属性)。当我尝试同时筛选
^i
状态
属性时,我总是得到空结果

例如,我希望获取
A
子类型
Y
Z
的所有实体,但只有
Z
实体具有
状态
属性等于
“活动”
。 我按照以下方式构建查询:

ObjectifyService.ofy().load().type(A.class)
    .filter("^i in", Arrays.asList(new String[] {"Y", "Z"})
    .filter("status", "active")
    .list();
这将返回一个空列表。如果我删除
状态
过滤器,它将按预期返回
X
Z
实体。如果查询仅按
Z
类型过滤,则
状态
过滤器工作正常

由于我需要
Y
Z
实体,我需要一种方法来过滤
status
属性,因为status不存在或等于“active”:第一个子句用于非
Z
的类型,第二个子句用于非
Z
的类型


你有什么建议吗?谢谢

您对^i和状态有自定义索引吗?没有,我对^i属性没有控制权(它由Objectify内部管理),但我对状态有一个索引可能取决于,因为我在状态属性上有这个index@index(IfNotNull.class)?使用@index注释,我得到了相同的结果。我真的需要一个“exist”查询运算符…虽然您不能将
@Index
注释添加到
^I
(我相信它已经被索引),但您可以尝试一个自定义索引,允许您在datastore-indexes.xml中查询
^I和状态