如何在GAEJ中建模实体关系?

时间:2012-06-21 08:03:31

标签: java google-app-engine google-cloud-datastore referenceproperty

我想知道 - 一个例子非常感谢 -

如何在Google App Engine for Java中建立关系模型?

- 一对多 - 很多人

我在网上搜索过,我发现Java没有任何指南和教程都是关于Python的。

我从article了解到,在Python中,关系是使用 ReferenceProperty 建模的。但是,我在Javadoc引用中没有发现这个类。

此外,他们在article中讨论了以下内容:

  目前,Java用户的工具短缺,主要是由于App Engine的Java平台相对较新。

然而,这是写于2009年。

最后,我最终使用每个实体的祖先路径建模关系。我发现这种方法存在问题并限制了应用程序的可扩展性。

你能指导我到Python的 ReferenceProperty 类的等效Java类吗?或者,您能否举例说明如何使用java数据存储区低级API在AppEngine中建模关系。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

在GAE / J中创建实体之间的关系取决于您使用的db API:

  1. JDO:entity relationships

  2. JPA:see docs

  3. Objectify:single-value relationships

  4. 低级API:将一个实体的键作为属性添加到另一个实体:请参阅属性类型.

答案 1 :(得分:1)

只是小费。在定义数据模型时,请考虑最终用户查询并相应地定义数据模型。

例如,我们以租用书籍的商店为例。在传统的应用程序中,您将拥有三个主要实体:

- >书

- >客户端

- >租(解决多对多)

要显示客户租用哪本图书的报告,您可以在Rent表,Book表和客户表上发出查询。

但是,在GAE中不起作用,因为不支持连接操作。

我找到的解决方案(可能是其他解决方案)是使用相同的三个表进行建模,但将书籍和客户端定义嵌入到Rent表中。

这样,显示由谁租用的书籍列表非常快速且便宜。唯一的缺点是,如果例如书的标题发生变化,我必须浏览所有嵌入的对象。但是,与只读查询相比,这种情况多久发生一次。

作为总结,请考虑最终用户查询