2012-04-25 7 views
1

私はまだMorphiaを使用していませんが、現在のプロジェクトではそれを検討しています。モルフィアとオブジェクトグラフ

私はいくつかの@Referenceアノテーションを持つPOJOを持っていて、Morphiaにデータベースからオブジェクトグラフをフェッチするよう依頼します。別のDAOまたはデータストアの呼び出しを行い、Morphiaに最初のグラフで既にインスタンス化されているオブジェクトをフェッチするよう依頼すると、Morphiaはすでにインスタンス化されたオブジェクトへの参照を返しますか、

Morphiaが毎回オブジェクトの新しいインスタンスを返す場合は、すでにインスタンス化されているオブジェクトを複製しないMorphiaを使用したリポジトリの作成に最適な方法をお勧めしますか?

答えて

3

私がモルフィアで見るように、それはすべての参考文献を読み返します。 これは問題の1つで、Morphiumを作成した理由です。私はそこにキャッシングレイヤーを統合していますので、参照を読んだら、再度読み取られることはありません(IDで検索した場合は少なくとも...)

1

生産にモルフィアを使用し、あなたが参照したものを読み込まないようにしてください。

メインクラスに@Reference要素を定義するときに、レイジーローディングオプションを使用する方法があります。これは、もちろん、この動作がそのオブジェクトに対して「グローバル」であることを意味します。

これを行うより良い方法は、Morphiaを使用して@Referenceを定義せず、代わりに参照を管理することです。コードサンプルが必要な場合はお知らせください。

+0

コードサンプルを共有できますか? – mtariq

1

私も@Referenceを使用して停止し、代わりのようなものを宣言しました:むしろフィールド項目を持つよりも、

ObjectId itemId 

を。これには2つの利点があります。(1)オブジェクトキャッシングを使用して作成したヘルパーgetObject(...)メソッドを使用してゲッターを定義できます。(2)単純なObjectIdを完全なDBRefではなくMongoオブジェクトに格納します。コレクション名、したがってデータサイズの約2倍が含まれます。

関連する問題