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和状态