我正在使用带有Objectify的GAE并拥有如下实体:
@Entity
class LevelOne {
@Id
Long id;
@Index
@Load
Ref<LevelTwo> two;
}
@Entity
class LevelTwo {
@Id
Long id;
@Index
List<Ref<LevelThree>> threes;
}
@Entity
class LevelThree {
@Id
Long id;
}
我想找到LevelOne
的所有LevelTwo
,其中包含LevelThree
我使用查询:
ofy().load().type(LevelOne.class).filter("two.threes", keyOfThree).list();
但我没有结果。如果我不使用Ref
并嵌入完整的实体,我会从维基上的文档中得到我应该期待的结果,但冗余会变得吓人!
答案 0 :(得分:2)
Google App Engine的数据存储区不执行连接。 Ref<?>
是对外国实体的关键参考。您无法跨参考文件进行过滤。
但是,您可以在LevelOne对象中创建合成索引字段,并使用您希望的任何数据(可能在@OnSave方法中)填充它 - 包括其他实体中的数据。但是,与一般的非规范化一样,您必须注意数据的更新方式。