2016-12-02 7 views
1

私は、ProductDbデータベースのコレクション製品に格納されている、Entity Market(marketDbデータベース内のコレクションにマーケットが保存されています)を参照しています。私はそのIdで市場を読みしようとすると、私はヌルとして市場が、製品の返品を取得することができています*/Springデータ - MongoDB:別のデータベースに属するDBRefドキュメントを取得できません

{ 
    "_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" }) 
} 

/*Entity */ 
class Market { 

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

} 

/**市場は次のようにコレクションに格納されています。

ただし、 1.製品がMarketと同じデータベースに属するコレクションに格納されている場合、製品はMarketの一部として返品されます。 2.上記のコードの場合、Product referenceを @ DBRef(db = "productDb"、lazy = true)と指定すると、 プライベート製品製品です。

次に、商品エンティティのIDが入力されたDBRefへの参照が取得されます。

市場に属する製品エンティティが、異なるデータベースに属している場合、市場での読み取り操作の一部として読み込まれない理由をお聞かせください。 MarketRepositoryがproductDbデータベースから製品データを読み込むための追加の構成を追加する場合は、コンバータ用/カスタムクエリを追加してMarket用の参照製品をロードする必要がありますか?

ありがとうございました。

私が使用しているMongo-Java Driverは3.2.2です。

答えて

0

あなたはfetch="select"またはfetch="join"で試しましたか? lazy = "true"は、オブジェクトをロードする時点ではなく、別のクエリで関連付けオブジェクトを取得することを意味します。 fetch = "join"は、データベースからアソシエーションオブジェクトを取得するために常に1つのクエリを起動します。

+0

fetch = "select"または "join"はjpa固有の権利ですか?この場合、@DBRefアノテーションがあるSpring Data-Mongoでは、アノテーションに対してdb = "$ {databaseName}"、レイジー= $ {true/false}しか指定できません。 –

関連する問題