【问题标题】:How to access entities from many to many relationships如何从多对多关系访问实体
【发布时间】:2017-01-25 19:24:03
【问题描述】:

这里是解释。我有两个实体:房子,人。在我的系统中,一个人可能拥有多个房屋,而一所房屋可能拥有多个所有者。所以我创建了一个名为 HouseOwnership 的表(又名实体)。我希望能够对 HouseOwnership 进行两种不同的查询:

  • 给定一个 houseId,获取它的所有所有者
  • 给定一个personId,获取所有拥有的房屋

所以对于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 中创建对象,我可以这样做。但是我想知道是否有更简单的方法?

【问题讨论】:

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


    【解决方案1】:
    1. 一个实体只能有一个父级。

    2. 您无需将您的 HouseOwnership 实体设为任何实体的子实体。

    3. 您进行一个简单的查询以获取所有 HouseOwnership 实体,其中 houseRef 属性等于给定的 House 键,或 personRef 属性等于给定的 Person 键,或两者兼而有之。

    4. 您始终可以根据 ID 为没有父级的实体创建密钥。

    【讨论】:

      【解决方案2】:

      您几乎肯定希望将此建模为 House 上的 @Index Set&lt;Ref&lt;Person&gt;&gt; owners; 属性。创建额外的关系实体会产生大量开销。

      不要尝试从关系模型中逐字映射模式 - 使用文档结构对您有利。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-24
        • 1970-01-01
        • 1970-01-01
        • 2015-12-12
        • 2013-04-25
        • 1970-01-01
        • 2016-05-12
        • 1970-01-01
        相关资源
        最近更新 更多