6

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

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

-
一对多 - 多对多

我在网上搜索了所有关于 Java 的内容,所有指南和教程都是关于 Python 的。

我从这篇文章中了解到,在 Python 中,关系是使用ReferenceProperty建模的。但是,我在 Javadoc 参考资料中没有发现任何关于此类的信息。

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

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

但是,那是在 2009 年写的。

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

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

在此先感谢您的帮助。

4

2 回答 2

4

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

  1. JDO:实体关系

  2. JPA:见文档

  3. 物化:单值关系

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

于 2012-06-21T13:40:00.427 回答
1

只是一个提示。在定义您的数据模型时,请考虑最终用户查询并相应地定义您的数据模型。

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

--> 书

--> 客户端

--> Rent(解决多对多)

要显示哪个客户正在租用哪本书的报告,您将发出一个查询连接 Rent 表、Book 表和 client 表。

但是,在 GAE 中,由于不支持连接操作,因此无法正常工作。

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

这样,显示正在租借的书籍列表非常快速且便宜。唯一的缺点是,例如,如果一本书的标题发生变化,我必须检查所有嵌入的对象。但是,与只读查询相比,这种情况发生的频率如何。

总而言之,考虑最终用户查询

于 2012-06-21T18:29:38.573 回答