在参考文献列表中对对象列表进行客体化过滤

时间:2015-01-13 08:14:54

标签: google-app-engine google-cloud-datastore objectify

我正在使用带有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并嵌入完整的实体,我会从维基上的文档中得到我应该期待的结果,但冗余会变得吓人!

1 个答案:

答案 0 :(得分:2)

Google App Engine的数据存储区不执行连接。 Ref<?>是对外国实体的关键参考。您无法跨参考文件进行过滤。

但是,您可以在LevelOne对象中创建合成索引字段,并使用您希望的任何数据(可能在@OnSave方法中)填充它 - 包括其他实体中的数据。但是,与一般的非规范化一样,您必须注意数据的更新方式。