2012-04-23 10 views
2

高速検索クエリを得るためにOneToManyとManyToOne関係でHibernate関係を設定する最適な方法は誰にも分かりますか? OneToMany(mappedBy = ...)を使用するために、既定のリレーションシップをそのまま残しておきますか?あるいは、最適な結果のために使用される他の方法があります。休止状態でOneToMany ManyToOne関係を設定するための最適な方法

私はエンティティのツリーを取得し、任意のノードの下のすべてのリレーションをできるだけ早くロードしたいと考えています。

答えて

-2

あなたがオブジェクトグラフの検索や読み込みを話しているかどうかはわかりません。

オブジェクトグラフの読み込みのパフォーマンスが向上します。

1)データベーステーブルのインデックス。
2)フェッチ戦略のチューニング。 n + 1個の選択を避ける。
3)第2レベルのキャッシング

インデックスは常にあなたに役立つはずです。フェッチ戦略を調整すると役立ちます。第2レベルのキャッシュが役立ちます。 2番目と3番目の場合は、最適なパスを決定するためにいくつかのメトリックを収集する必要があります。

あなたを言うとき

は、可能な限り迅速に任意のノードの下にあるすべての関係をロードします。

一度にデータをあまり読み込まないように注意してください。最適化されたhqlを記述して、オブジェクトグラフのサマリをロードしてユーザに提示する方が良い場合もあります。その後、ユーザが個々のアイテムを選択すると、フルオブジェクトをロードします。

+0

Mm ..逆:n + 1以外の選択を避ける必要があります。結合を使用する場合、キャッシュをヒットしないため、書き込みよりも頻繁に読み取りを行うとパフォーマンスが大幅に低下します。一般的なルール:通常の要件がない限り、lazy = trueとfetch = selectを使用します。 –

+0

あなたはどういう意味ですか?その逆です。 – hvgotcodes

+0

n + 1個の選択を避け、結合を使用することをお勧めします。逆の場合は、実際には通常の場合にジョインを避け、セカンドレベルのキャッシュを活用するためにセレクトまたはサブ選択を使用する必要があります。 –