我在採訪中被問到爲什麼hibernate @OneToOne和@ManyToOne使用Eager Loading和@OneToMany,@ManyToMany使用Lazy Loading?我向面試官解釋的是,因爲用戶可能對結果列表不感興趣,並且需要更多時間來加載,所以默認情況下它們被延遲加載。但面試官不滿意。任何人都可以清楚地指出爲什麼Hibernate社區讓他們如此?爲什麼hibernate @OneToOne和@ManyToOne使用Eager Loading,@OneToMany和@ManyToMany使用Lazy Loading?
0
A
回答
1
在任何@*ToOne
關係中,目標方明確可以假定爲屬於作爲邏輯部分來源。所以可以預料,如果目標對象正在被訪問,它只會發生在源對象上。而且這也會發生。
對於@*ToMany
,很難先知道需要哪個目標對象,或者程序在加載關係的源端時是否需要所有相關對象。在這種情況下,盲目加載相關對象會浪費資源。
此默認設置將確保在大多數情況下,可能要訪問的對象存在於內存中,同時避免一次加載整組實例。
導致啓發式檢測的基本問題是:
什麼相關的對象將被定義,並且可以有效地提供這些對象。
如果缺省值在給定數據模型中的某個點上不合適,則可以適當地更改延遲加載的設置。
相關問題
- 1. 與Laravel的不同結果Lazy Eager Loading
- 2. MVC With Lazy Loading
- 3. JFreeChart&Lazy loading
- 4. Yii Lazy Loading
- 5. Lazy Loading和JavaScript與Reveal.js
- 6. Eager Loading Laravel Eloquent
- 7. Lazy Loading in MongoDb
- 8. Lazy loading image listView
- 9. Android Lazy loading ViewPager
- 10. 將Lazy/Delay-loading轉換爲API中的Eager-loading的首選方法?
- 11. @OneToMany(EAGER)vs @LazyCollection(FALSE)&OneToMany(LAZY)
- 12. Lazy Loading in LongListSelector
- 13. Lazy Loading of Layouts
- 14. jQuery Cycle Lazy Loading
- 15. Linq to Entities - Eager Loading
- 16. Pluck Eager Loading Laravel 5.4
- 17. 如何在CollectionView中使用Lazy Loading?
- 18. Lazy loading替代Model.all
- 19. ServiceStack和實體框架Lazy Loading
- 20. EclipseLink如何使用兩個@OneToMany和@ManyToOne替換@ManyToMany
- 21. Fluent NHibernate Linq Complex Component Eager Loading
- 22. Rails 3 session not lazy loading
- 23. Eager loading未載入導軌
- 24. lazy loading asp.net Ajax Control Toolkit accordion
- 25. EclipseLink無法使用嵌套的Lazy OneToMany關係填充Lazy OneToOne
- 26. Laravel 4 Eager Loading n + 1期
- 27. Eager loading for globalize2翻譯
- 28. NHibernate - Lazy-Loading原始類型
- 29. Android Lazy list loading and clicks
- 30. Hibernate @OneToMany EAGER不起作用
因爲這就是JPA規範所說的應該做的。 AFAIK,如果Hibernate有選擇的話,默認情況下它會使一切都變得懶惰。 –
可以有很多孩子(家庭可以增加),但只有一個家長。 –