参考中参考列表的对象化过滤器
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 上的文档中了解到,如果我不使用 Ref
s 并嵌入完整的实体,我应该期待结果,但冗余会变得可怕!
Google App Engine 的数据存储不执行连接。 Ref<?>
是对外国实体的重要参考。您不能跨引用进行过滤。
但是,您可以在 LevelOne 对象中创建一个综合索引字段,并用您想要的任何数据填充它(可能在 @OnSave 方法中)——包括其他实体中的数据。但是,与一般的反规范化一样,您必须注意数据的更新方式。
我将 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 上的文档中了解到,如果我不使用 Ref
s 并嵌入完整的实体,我应该期待结果,但冗余会变得可怕!
Google App Engine 的数据存储不执行连接。 Ref<?>
是对外国实体的重要参考。您不能跨引用进行过滤。
但是,您可以在 LevelOne 对象中创建一个综合索引字段,并用您想要的任何数据填充它(可能在 @OnSave 方法中)——包括其他实体中的数据。但是,与一般的反规范化一样,您必须注意数据的更新方式。