English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Hibernateでの遅延ロードと強制ロードの違い

LazyとEagerはORM内の2つのデータロード戦略であり、例えばHibernateとEclipseLinkです。エンティティクラスが他のエンティティを参照する場合(例えば、EmployeeとPhone(Employeeの電話))、これらのデータロード戦略を使用します。 

遅延ロード-明示的にgetterやsizeメソッドを呼び出すまで、関連データはロードされません。

  • 一对多の集合を使用する場合、遅延ロードを使用してください。

  • 関連するエンティティを使用していないことを確定した場合は、「遅延ロード」を使用してください。 

Eagerロード-データのロードは親を取得する際に発生します。

  •  関係があまり多くない場合は、「渴望ロード」を使用してください。したがって、急いでロードはサーバー上のさらなるクエリを減らす良い習慣です。

  • すべての場所で主要エンティティを使用することを確定した場合は、「急いでロード」を使用してください。

順序キー遅い急いで
1
抽出戦略 
遅延ロードでは、明示的にgetterやsizeメソッドを呼び出すまで、関連データはロードされません。
急いでロードでは、データのロードは親を取得する際に発生します。 
2
ORMレベルのデフォルト戦略 
デフォルトでは、ManyToManyとOneToManyの関連は遅延ロード戦略を使用します。
デフォルトでは、ManyToOneとOneToOneの関連は遅延ロード戦略を使用します。
3
ロード設定
コメントパラメータを使用して有効にできます:

fetch = FetchType.LAZY 
コメントパラメータを使用して有効にできます:

fetch = FetchType.EAGER
 4
パフォーマンス
初期ロード時間は急いでロードよりも短いです
不必要なデータが多すぎるとパフォーマンスに影響を与える可能性があります