は、我々が
FetchType.EAGER
を使用しての棄権すべきいくつかのルールのセットを持っていますか?JPA:いつeager fetchingがStackOverflowErrorになるのですか?私はJPAフレームワークの一部(例えば、Hibernateは)循環依存関係を解決する必要があることを聞きました。
- フレームワークでリレーするのは危険にさらされていますか?
FetchType.EAGER
と一緒にStackOverflowError
を実行すると、フレームワーク内で常にバグが発生します(2つのテーブルに3つの行がある場合はどうなるでしょうか)。FetchType.EAGER
を避けるために
答えて
一つの良い理由は、あなたが常に熱心(JOIN FETCH
で)JPQL
に手動でフェッチを有効にすることができますが、FetchType.EAGER
を設定した場合は、遅延フェッチを有効にすることができないということです。
EAGER:
便利な、しかし熱心遅い
使用あなたの親クラスは常に準クラスを必要としています。
LAZY:
以上のコードが、はるかに効率的
は基本的に遅延ローディングは、熱心な代替(パフォーマンス、リソースの使用)よりも多くの利点があります。特定の問題が発生しない限り、一般的にeagerフェッチ用に設定しないでください。
ドメインインスタンスを共有すると異なるのHibernateセッション(例えばHTTPセッションスコープにドメインクラスのインスタンスを入れて、そこからプロパティにアクセスする。 - などのユーザーなど)をaccross
あなたは確信していますインスタンスがフェッチされるたびに(またはほとんどの場合)特定のリレーションプロパティにアクセスしますが、eagerフェッチのためにこのリレーションをコンフィグレーションすることも意味があります。
例:関係者と私はPersonエンティティをロードするとき、私はあなたが怠惰に保つことができるようにすべての時間をアドレスフェッチする必要があることを、ここではその必要はありませんが アドレス。
結論
EAGERフェッチ戦略は、コードのにおいです。ほとんどの場合、長期的なパフォーマンス上の不利益を考慮することなく、単純化のために使用されます。フェッチ戦略は、エンティティマッピングの責任であってはなりません。それぞれのビジネスユースケースにはエンティティの負荷要件が異なるため、フェッチ戦略を個々のクエリに委任する必要があります。 グローバルフェッチプランでは、クエリごとにフェッチされるLAZYの関連付けのみを定義する必要があります。常に生成された問合せ戦略をチェックすることと組み合わせることで、問合せベースのフェッチ計画はアプリケーションのパフォーマンスを向上させ、コストを削減することができます。
回答ありがとう、upvoited!しかし、質問は 'StackOverflowError'に関するものです。あなたはそれについて言及しなかった。 –
ここであなたの答えを参照してください:http://stackoverflow.com/a/39015294/3014866 –
ok thanx buddy .. – Gokul
- 1. JPA再帰エンティティStackOverflowError
- 2. OneToMany関係のStackoverflowError JPA
- 3. hibernateを使用してeager fetchingをプログラムでオフにする方法はありますか?
- 4. StackOverflowErrorはいつスローされますか?
- 5. 入れ子レイアウトが2つしかないStackOverFlowError
- 6. tree()の結果がStackOverflowErrorになる
- 7. StackOverflowErrorでsbtコンパイルが失敗するのはなぜですか?
- 8. JPA/Hibernate:テーブルが見つからない
- 9. 私のシングルトンクラスがStackOverflowerrorをスローするのはなぜですか?
- 10. JPA/Hibernate Eagerにおける多対多リレーションシップ
- 11. facebook wall links fetching
- 12. SBTがにStackOverflowError
- 13. pdo page wise fetching
- 14. Eager対Lazy Haskell。 Eagerの言語で無限のリストが可能ですか?
- 15. にStackOverflowError
- 16. JPAクエリでjavax.faces.model.SelectItemクラスが見つからない
- 17. NHibernate eager loadingが必要ですか?
- 18. 簡単なプログラムではStackOverflowError
- 19. なぜ実行時にStackOverflowError ...?
- 20. ジョインでのEagerフェッチ
- 21. JPAエンティティのOneToMany関係には何がないのですか?
- 22. JPAトランザクションを見つけることができないHibernate Envers:
- 23. 単純なゲームスローStackOverFlowError
- 24. SQLEXCEPTION:列が見つからないJPAの@query
- 25. AdaptRecursiveにStackOverflowError
- 26. Laravel - Eagerモデルのメソッド(関係ではない)をロードする
- 27. SpringデータJPAリポジトリが見つからないApache Shiroアノテーションがスプリングで有効になっている場合
- 28. はエラーにStackOverflowError
- 29. Laravel Eager Loading - 常に良い?
- 30. Restletのカスタムベリファイアが原因でJava 8でStackOverflowErrorが発生する
すべてのJPAプロバイダは、巡回関係の熱心な負荷に対処できなければなりません。問題がある場合は、JPAプロバイダに対してバグを起こす必要があります。 –
@NeilStockton、ありがとう!私はあなたの答えをここで参照しました:http://stackoverflow.com/a/39015294/3014866 –