这是解释。我有两个实体:House,Person。在我的系统中,一个人可能拥有多个房屋,一个房子可能拥有多个房主。所以我创建了一个名为HouseOwnership的表(又称实体)。我希望能够对HouseOwnership进行两种不同的查询:
所以对于HouseOwnership,我做
@Entity
class HouseOwnership{
@Load
private Ref<House> houseRef;
@Load
private Ref<Person> personRef;
}
如何使用OfyService.ofy()
进行查询?
我很想做
owners =OfyService.ofy().load().type(HouseOwnership.class).ancestor(house).list()
和
houses =OfyService.ofy().load().type(HouseOwnership.class).ancestor(person).list()
但为此,我必须将两个引用都放入@Parent
。我允许这样做吗?如何进行查询?
另外我只有id而不是实际的对象所以我必须从id创建对象,我可以这样做。但我想知道是否有更简单的方法?
答案 0 :(得分:1)
实体只能有一个父母。
您不需要让您的HouseOwnership实体成为任何实体的子女。
您进行简单查询以获取所有HouseOwnership实体,其中houseRef属性等于给定的House键,或personRef属性等于给定的Person键,或两者兼而有。
您始终可以从ID中为没有父母的实体创建密钥。
答案 1 :(得分:0)
你几乎肯定想在House上将其建模为@Index Set<Ref<Person>> owners;
属性。创建额外的关系实体会产生大量的开销。
不要试图从关系模型中逐字地映射模式 - 使用文档结构对您有利。