我有一个实体市场(市场存储在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读取Market时,我能够获取Market,但Product返回为null。
但是: 1.如果产品存储在与Market属于同一数据库的集合中,则product将作为read on Market的一部分返回。2.如果在上面的代码中,如果我指定产品引用为:@DBRef (db = "productDb",lazy = true) private Product产品;
然后,我得到一个对DBRef的引用,其中填充了Product实体的id。
谁能建议一下,为什么属于Market的产品实体不能作为Market上读取操作的一部分加载,因为它们属于不同的数据库?当两者位于不同的数据库中时,我是否需要添加任何转换器/自定义查询来为市场加载引用的产品,或者是否需要为MarketRepository添加额外的配置以从productDb数据库中读取产品数据?
谢谢。
我使用的Mongo-Java驱动程序是3.2.2。
发布于 2016-12-02 17:07:08
嘿你有没有试过用fetch="select"或者fetch="join"。lazy ="true",这意味着它将在单独的查询中检索关联对象,而不是在加载对象时检索。fetch="join“它将始终触发一个查询,以便从数据库中获取关联对象。
https://stackoverflow.com/questions/40924374
复制相似问题