【问题标题】:Implementing Objectify Entity relation实现 Objectify Entity 关系
【发布时间】:2015-03-25 16:03:40
【问题描述】:

我是 GAE 和数据存储的新手。我正在尝试使用 Objectify-version 5 来访问数据存储。我对使用 Objectify 跨实体维护关系的方式感到非常困惑。为了基本理解,我无法将关系模式的概念映射到 Objectify 框架。在关系数据库(如 PK/FK 的东西)中,它更容易获得。我发现很难理解与 Objectify 的关系(1-many,many-many)。我阅读了 objectify doc here,仍然没有理解,还不清楚。例如,我有一个 objectify Entity-Manager,另一个实体 - 员工。我想保持经理与员工之间的一对多关系。问题是 -

  1. 如何在员工实体中放置经理实体的引用(如 RDBMS 中的外键)。
  2. 设置参考后,如何让所有员工为 A 经理工作?
  3. 如何为这些实体实现多对多关系。

【问题讨论】:

  • Objectify 不会改变您管理实体关系的方式,因此您可能应该阅读 Datastore docs 以熟悉这些概念,然后再阅读有关 Objectify 的内容。 1:nn:n 关系通常使用索引的 Key 属性或 List<Key> 属性来实现,具体取决于您的要求。
  • 谢谢你,你能给我一个多实体持久性的例子吗,我的意思是我如何在 Employee 实体中获取 Manager 实体引用,同时插入一个为他工作的 Employee,假设 Manager:employee =一个:很多。在持久化Employee实体之前,ofy().save().entity(emp).now();如何获得经理参考。谢谢你。

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


【解决方案1】:

here所述:

如何在员工实体中放置经理实体的引用(如 RDBMS 中的外键)。

使用 Key<Manager>Ref<Manager> 。它们基本上是可以互换的,但Ref 拥有一个 get 方法来在需要时获取实体。

设置参考后,如何获取所有员工 为经理工作?

如果您使用“外键”方法,您只需在数据存储中查询 Employee 实体,其中字段“manager”等于经理 ID 的 ref 或 Key,就像它是任何其他值一样。

如何为这些实体实现多对多关系

您可以存储参考集合,例如 List<Key<Employee>>Set<Ref<Manager>

【讨论】:

  • 谢谢你,你能告诉我如何在插入员工实体时获得对 Manager 的引用,比如 - Employee emp = new Employee(); employee.manager = Ref.create(managerKey); ofy().save().entity(emp).now();如何获取之前插入的 managerKey。而这个 Ref.create() 方法有什么作用呢?
  • Ref.create 基本上为您提供了一个 Ref 对象,其中包含 GAE 需要查询的所有实体 id 和类型。为了获取密钥,您只需要实体类型和 id(就像 Ref 一样),不幸的是,您需要创建一个密钥来获取 ref,但是通过快速破解,它应该看起来像这样 Ref.create(Key. create(Manager.class, managerId));
  • 谢谢你这么多兄弟,你让我的一天。希望回答这些 - 为什么我们需要每个实体的密钥,因为我们已经有一个自动生成的唯一 @Id (long,Long,string ) 场地 ?对于相同的实体引用,密钥是否保持不变?亲子关系有什么用?
  • Hey Tanvir Key(或 Ref)包含 Id+实体类型+父信息。为什么?因为数据存储区中没有“表”,这就是为什么您需要为实体添加附加信息,以了解它实际上是什么。 @id 生成一个 Key 属性。所有这一切都是由 Objectify 完成的,他们只是为你隐藏了令人讨厌的细节。
  • 父子关系用于确保在同一个实体组中创建两个实体,实体组是数据存储中的关键概念,但您应该知道的主要事情是您不能访问多个实体单个事务中的组。更多信息在这里:code.google.com/p/objectify-appengine/wiki/Concepts
猜你喜欢
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
相关资源
最近更新 更多