【问题标题】:How to model entity relationships in GAEJ?如何在 GAEJ 中建模实体关系?
【发布时间】:2012-06-23 10:30:20
【问题描述】:

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

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

-一对多
- 多对多

我搜索了整个网络,但没有找到任何关于 Java 的指南和教程都是关于 Python 的。

我从article 了解到,在 Python 中,关系是使用 ReferenceProperty 建模的。但是,我在 Javadoc 参考中没有找到关于这个类的任何信息。

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

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

不过,那是 2009 年写的。

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

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

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

    1. JDO:entity relationships

    2. JPA:see docs

    3. 对象化:single-value relationships

    4. 低级 API:将一个 Entity 的 Key 作为属性添加到另一个 Entity:见属性 types.

    【讨论】:

    • 感谢您的回答。只是为了确定,你的意思是不是如下: entity.setProperty("property_name", Key);
    • 请教另一个问题,使用低级 API 是一种好习惯吗?在不久的将来,我会在项目的可维护性和可扩展性方面遇到问题吗?提前谢谢您的指导。
    • 1.是的,将属性设置为键是可以的。 2. 所有高级 API(JDO、JPA、Objectify)都使用底层 API。不会有可扩展性问题。可维护性是另一回事 - 您将编写大量样板代码。我更喜欢 Objectify。
    【解决方案2】:

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

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

    --> 书

    --> 客户

    --> Rent(解决多对多)

    要显示客户正在租借哪本书的报告,您可以在 Rent 表、Book 表和 client 表上发出查询连接。

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

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

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

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

    【讨论】:

    • 谢谢,我明白了。我在网上找到了其他讨论这个想法的文章,这证明这是 GAE 中的最佳实践。
    猜你喜欢
    • 2023-04-03
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    相关资源
    最近更新 更多