【问题标题】:How does GAE/JDO convert Entities to domain objects?GAE/JDO 如何将实体转换为领域对象?
【发布时间】:2011-05-08 21:09:15
【问题描述】:

在 App Engine 的 JDO 实现中,对象类型与持久化到数据存储区的实体一起保存为“种类”。当这些实体从数据存储中取回时,它们会自动返回(在 JDO 的某个层中)作为原始对象类型。让我困惑的是,只保存了类的简单名称;不是完整的路径。那么JVM是如何加载正确的类的呢?

例如,如果我有 com.project.domain.User 并且我将此类的一个实例保存到数据存储区,则仅为实体类型定义“用户”。当我使用 JDO 来选择这些数据时,我得到一个 com.project.domain.User 回来。 GAE/JDO 怎么知道加载 com.project.domain.User 而不是 com.project.other.domain.User?

【问题讨论】:

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


    【解决方案1】:

    您的 JDO 提供程序(GAE 实际上并未参与此等式)保留从实体到表的内部映射。有时它由各种 xml 文件形成,有时它通过注释形成(取决于您的编码风格)。在这个映射表中,表名实际上映射到完全限定的类。

    如果您要存储两种用户对象,那么 JDO 会给您一个例外,因为它们将使用同一个表。您可以通过指定不同的表(通过注释或 xml 配置)来解决此问题。该规范将进入 JDO 的内部映射。然后 JDO 就会知道如何正确解析实体。

    【讨论】:

    • 那么这个内部映射是如何在 JVM 启动/关闭之间保持的呢?我没有在 XML 或注释中定义任何东西。
    • 实际上 GAE 参与其中,因为“JDO 提供者”是 GAE(或者更确切地说是他们的 DataNucleus 插件)。如果你想解决它,它来自这个类code.google.com/p/datanucleus-appengine/source/browse/trunk/src/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多