【问题标题】:Google App Engine JDO Relationships (Java)Google App Engine JDO 关系 (Java)
【发布时间】:2011-06-19 09:23:48
【问题描述】:

看看http://code.google.com/intl/sv-SE/appengine/docs/java/datastore/jdo/relationships.html(拥有的一对一关系)的第一个示例。

我不太明白一件事。
如果我从我的 PersistanceManager 获得一个 Employee,我会同时获得 ContactInfo,还是在我尝试使用它时获得 ContactInfo?

如果它确实同时得到它,那么拥有一对多关系呢?
举个例子,假设员工有一个包含 100 个联系人信息的列表。
这是否意味着当我获得 Employee 时,我将获得所有 100 个 ContactInfo?

谢谢
//F

【问题讨论】:

    标签: java google-app-engine jdo


    【解决方案1】:

    默认情况下,加载父数据时不会获取子数据。但是,如果您尝试访问孩子,它将在那时被加载。这称为延迟加载。一个重要的注意事项是,一旦你关闭了 JDO 事务,如果你尝试访问一个延迟加载的属性,你会得到一个异常(因为实体现在已分离)。

    您可以使用 JDO 获取组在实体上配置预加载。当您加载父级时,急切加载将加载所有子级数据。如果您需要在事务后访问该属性,或者如果您需要通过网络将实体发送到客户端,这将非常有用。

    推荐阅读:

    Fetch Groups

    JDO Layer Design

    【讨论】:

    • 最好不要参考这些页面,因为它们适用于 2008 年不复存在的 JPOX。最好通过datanucleus.org/products/accessplatform_1_1 访问,因为您正在使用这些页面
    • @DataNucleus:您评论中的链接也已损坏。我正在尝试使用 FetchGroup 和PersistenceManager.newQuery() 急切地获取使用 DataNucleus/JDO/MySQL 的孩子。延迟加载有效,所以我知道我的关系映射正确。但是当我尝试急切加载时,我没有孩子。我只是在寻找带有示例的文档。如果你能更新链接,那就太好了。
    • 当时还没有发表评论,但遗憾的是 GAE 仍然停留在古代版本上。只需使用datanucleus.org 并从那里导航
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2010-11-27
    • 2010-12-11
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多