参考中参考列表的对象化过滤器

Objectify filter on List of references in reference

我将 GAE 与 Objectify 结合使用,并具有如下实体:

@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;
}

我想找到所有具有 LevelTwo 且包含 LevelThree

LevelOne

我使用查询:

ofy().load().type(LevelOne.class).filter("two.threes", keyOfThree).list();

但我没有得到任何结果。我从 wiki 上的文档中了解到,如果我不使用 Refs 并嵌入完整的实体,我应该期待结果,但冗余会变得可怕!

Google App Engine 的数据存储不执行连接。 Ref<?> 是对外国实体的重要参考。您不能跨引用进行过滤。

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