當我們應該放棄使用
FetchType.EAGER
時,我們是否有一些規則?JPA:何時在StackOverflowError中提前獲取結果?我聽說一些JPA框架(如Hibernate)應該解決循環依賴。
- 當轉發框架有風險時,我們是否有一些建議?
StackOverflowError
與FetchType.EAGER
一起總是關於框架中的錯誤(我的意思是如果我有兩個表中的3行)?
回答
一個很好的理由,以避免FetchType.EAGER
的是,你可以隨時啓動手動渴望獲取的JPQL
(與JOIN FETCH
),但如果你已經設置FetchType.EAGER
您不能啓用懶抓取。
熱切的:
方便,但速度緩慢
使用急於當你的父類總是需要爲類。
懶:
更多的編碼,但更高效的
基本上延遲加載比急於替代更多的利益(性能,利用資源)。除非遇到某些問題,否則通常不應將其配置爲提前獲取。
共享一個域實例進行的跨不同的Hibernate Session(例如,把一個領域類實例時到HTTP會話範圍,並從它訪問屬性 - 例如用戶)
當你確定,每次(或大部分時間)訪問一個特定的關係屬性時,當一個實例被提取時,配置這個關係用於提前獲取也是有意義的。
如:人物關係和地址 在這裏,它不是必要的,當我加載Person實體,我需要提取地址的所有的時間,所以你可以繼續懶。
結論
急切抓取策略是一個代碼味道。大多數情況下,爲了簡單起見,不考慮長期性能損失。提取策略決不應該是實體映射責任。每個業務用例都有不同的實體負載需求,因此應該將獲取策略委託給每個單獨的查詢。 全局提取計劃只應該定義LAZY關聯,它是在每個查詢的基礎上獲取的。結合始終檢查生成的查詢策略,基於查詢的提取計劃可以提高應用程序性能並降低維護成本。
感謝您的答案,upvoited!但問題是關於'StackOverflowError'。你甚至沒有提到它。 –
引用你的答案在這裏:http://stackoverflow.com/a/39015294/3014866 –
OK thanx buddy .. – Gokul
- 1. 如何在JPA中獲取存儲過程的結果集?
- 2. JPA急於提取不返回任何結果
- 3. 獲取DOMXpath結果低於以前的結果在HTML
- 4. 如何獲得獨特的結果JPA
- 5. 的StackOverflowError同時做好使用JPA 2.0
- 6. 在elasticsearch中提前返回結果
- 7. AngularJS在div中提前搜索結果
- 8. 提取結果在2小時以來
- 9. 提取結果
- 10. 提取結果
- 11. 在JPA/Play中提交事務之前,實體如何獲取ID?
- 12. JPA遞歸實體StackOverflowError
- 13. 加入之前獲取結果Zend
- 14. 僅在空時獲取結果
- 15. 爪哇 - 獲取的StackOverflowError
- 16. Hadoop Map任務獲取StackOverflowError
- 17. 獲取表單提交的結果
- 18. 從表單中提取值,從MySQL中提取結果並使用AJAX獲取結果
- 19. 如何從asp.net regex.match中提取結果?
- 20. 獲取結果
- 21. 獲取結果
- 22. 獲取結果
- 23. 如何在bash的grep結果之前/之後獲取行?
- 24. 在CakePHP中提取查詢結果3
- 25. 在PHP中提取JSONP結果集
- 26. JPA在返回結果
- 27. 在mysql中爲用戶獲取前三名的結果
- 28. 如何在數組中獲取結果時按值排序?
- 29. 僅在結果中存在多行時提取數據
- 30. 獲取當前目錄時函數的結果是「垃圾」?
所有JPA提供者都應該能夠應付急切的循環關係加載。任何問題都應該意味着你對JPA提供者提出了一個錯誤。 –
@NeilStockton,謝謝!我在這裏引用您的答案:http://stackoverflow.com/a/39015294/3014866 –