【问题标题】:Spring Data - MongoDB: Unable to retrieve DBRef document that belongs to another databaseSpring Data - MongoDB:无法检索属于另一个数据库的 DBRef 文档
【发布时间】:2017-04-16 21:38:35
【问题描述】:

我有一个实体市场(市场存储在 marketDb 数据库中的集合中),它引用产品(存储在 productDb 数据库中的集合产品中)。

/*Entity */
class Market {

@DBRef (db = "productDb")
private Product product;

}

/**Market 在集合中存储为:*/

{
  "_id": "4f0bc0e6-b6a8-11e6-a04d-080027e9004f",
  "_class": "com.package.Market",
  "createdById": "123",
  "editedById": "123",
  "name": "Market01", 
  "clientId": NumberLong("1"),
  "version": NumberLong("1"),
  "product": DBRef("product", "456", "productDb", { "$db": "productDb" })
}

当我尝试通过其 ID 读取市场时,我能够获取市场,但产品返回为空。

但是: 1. 如果产品存储在与 Market 属于同一数据库的集合中,则 Product 作为 read on Market 的一部分返回。 2.如果在上面的代码中,如果我将产品引用指定为: @DBRef (db = "productDb", 懒惰 = true) 私有产品产品;

然后我得到一个对 DBRef 的引用,其中填充了 Product 实体的 id。

任何人都可以建议为什么属于 Market 的产品实体在属于不同数据库时没有被加载为 Market 上的读取操作的一部分?当两者在不同的数据库中时,我是否需要添加任何转换器/自定义查询来加载市场的引用产品,或者为 MarketRepository 添加额外的配置以从 productDb 数据库中读取产品数据?

谢谢。

我使用的 Mongo-Java 驱动程序是 3.2.2。

【问题讨论】:

    标签: mongodb spring-data dbref


    【解决方案1】:

    嘿,您尝试过使用fetch="select"fetch="join"。 lazy =“true”,表示它会在单独的查询中检索关联对象,而不是在加载对象时。 fetch="join" 它总是会触发一个查询来从数据库中获取关联对象。

    【讨论】:

    • 我猜 fetch="select" 或 "join" 是 jpa 特有的吧?在这种情况下,对于 Spring Data - Mongo,我有 @DBRef 注释,我只能在注释上指定 db = "${databaseName}", lazy = ${true/false}。
    猜你喜欢
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多