2016-03-23 7 views
0

私はインタビューで、@OneToOneと@ManyToOneがEager Loadingと@OneToManyを使用し、@ManyToManyがLazy Loadingを使用する理由を尋ねられましたか?私がインタビュアーに説明したことは、ユーザが結果のリストに興味がないかもしれないので、デフォルトでは読み込みに時間がかかるということです。しかし面接官は満足していない。誰も明確に休止状態のコミュニティがそれらを作る理由を指定できますか?hibernate @OneToOneと@ManyToOneがEager Loadingと@OneToManyを使用する理由と@ManyToManyがLazy Loadingを使用する理由は何ですか?

+1

JPA仕様書では、これがすべきことだからです。 AFAIK、もしHibernateが選択肢を持っていたら、デフォルトではすべてが怠惰になるでしょう。 –

+0

子供はたくさんいることができます(そして家族はまだ増えますが)親は1人だけです。 –

答えて

1

任意の@*ToOneの関係では、ターゲット側は明らかにと見なすことができ、論理部分としてソースにが属します。したがって、ターゲットオブジェクトがアクセスされている場合、ソースオブジェクトにのみアクセスされることが予想されます。そして、これも起こるようです。

@*ToManyの場合、ターゲットオブジェクトのどれが必要になるか、または関係のソース側をロードするプログラムによってしばらくしてすべての関連オブジェクトが必要かどうかを知ることは困難です。その場合、関連オブジェクトを盲目的に読み込むことはリソースの無駄になります。

このデフォルト設定では、ほとんどの場合、アクセスされる可能性の高いオブジェクトがメモリに存在し、インスタンス全体を一度に読み込まないようにします。

ヒューリスティックにつながる基本的な問題は次のとおりです。
どのような関連オブジェクトが組み込まれ、効率的に提供できるか。

与えられたデータモデルの特定のポイントでデフォルトが適切でない場合は、遅延読み込みの設定を適切に変更することができます。

関連する問題