1

Morphiaはまだ使用していませんが、現在のプロジェクトで検討しています。

いくつかの@Referenceアノテーションが付いたPOJOがあり、データベースからオブジェクトグラフをフェッチするようにMorphiaに依頼するとします。次に、別のDAOまたはデータストア呼び出しを行い、最初のグラフですでにインスタンス化されているオブジェクトをフェッチするようにMorphiaに依頼した場合、Morphiaはすでにインスタンス化されているオブジェクトへの参照を返しますか、それとも新しいインスタンスを作成しますか?

Morphiaが毎回オブジェクトの新しいインスタンスを返す場合、すでにインスタンス化されたオブジェクトを複製しないMorphiaがサポートするリポジトリを作成するための最善の方法を誰かが推奨していますか?

4

3 に答える 3

3

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

于 2012-04-27T06:01:54.643 に答える
1

本番環境ではモルヒネを使用しています。参照を読み込まないようにする方法は2つありますが、これも私たちが遭遇したものです。

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

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

于 2012-05-09T22:19:05.727 に答える
1

私も @Reference の使用をやめ、代わりに次のようなものを宣言しました。

 ObjectId itemId

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

于 2012-06-10T20:59:07.760 に答える