【问题标题】:DBRefs (Mongo Document references) not fetched eagerly未急切获取 DBRefs(Mongo 文档引用)
【发布时间】:2011-12-25 12:15:24
【问题描述】:

我在可能的最简单化身中使用 Mongo(结合 Spring Data)。

我有两个(第一类)实体 (@Documents) A 和 B,其中 A 在其中包含 B 的引用 (@DBRef)。创建 A 和 B 时一切正常。但是,当读取对象 A(按 Id)时,引用 B 始终为 null

我相信默认情况下会急切地获取 DBRefs(请参阅http://static.springsource.org/spring-data/data-document/docs/current/reference/html/#mapping-usage-references),但目前的行为与此相反。任何想法为什么?

【问题讨论】:

  • 我对 RC1 也有同样的问题。通过外壳,我看到了正确的 dbref ,但是加载时引用始终为空。你升级了库吗?

标签: java spring mongodb spring-data spring-data-document


【解决方案1】:

你是对的,任何 DBRefs 都被急切地获取,但它们没有被急切地保存(AFAIK)。如果A有对B的引用,当你保存A的时候,Spring Data/MongoDB不会自动保存B,你必须要。

// Incorrect, upon retrieval a.getB() == null
A a = new A();
a.setB(new B());
repositoryA.save(a);

// Correct (to the best of my knowledge)
B b = repositoryB.save(new B());
A a = new A();
a.setB(b);
repositoryA.save(a);

【讨论】:

  • 是的,我似乎已经想通了。我现在正在寻找的是一种获取引用对象的方式/模式。因此,您可以使用 findOne(a_id) 获取“A”,但是如何获取 B?
  • 当你获取 A 时它应该在那里,正如你所期望的那样。我不知道 A 应该包含对 B 的空引用的任何原因(除了我的答案中的那个)。您是否尝试过使用 mongo 命令行客户端连接到服务器并运行查询?然后您可以查看 B 的 DBRef 是否存在于任何对象 A 中。
【解决方案2】:

迁移到 Spring Data Mongo M5 版本解决了这个问题。所以,在那之前一定是个bug。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多