1

我有一个实体市场(市场存储在 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.如果在上面的代码中,如果我指定Product引用为:@DBRef (db = "productDb",lazy = true) private Product product;

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

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

谢谢。

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

4

1 回答 1

0

fetch="select"嘿,你用or试过了吗fetch="join"?lazy =“true”,表示它会在单独的查询中检索关联对象,而不是在加载对象时。fetch="join" 它将始终触发单个查询以从数据库中获取关联对象。

于 2016-12-02T09:07:07.540 回答