[英]Is there any benefit of using lazy initialization as compared to Eager?
何時使用延遲初始化以及何時使用 Eager,即使我們使用延遲,我們將使用的變量仍將包含與以下任務相關的一些數據。 那么我們如何在兩者之間進行選擇呢? 兩者在性能和 memory 效率上有什么區別嗎?
請解釋任何最佳用例,因為一些線程支持渴望和一些懶惰。
一般來說,延遲加載的優點是:
缺點是:
在其他語言中,另一個缺點是實現最后一點的額外代碼,但 Kotlin 的by lazy
讓它變得非常容易!
顯然,總體收益取決於您需要該價值的可能性,以及啟動延遲與以后相比的影響。
我們應該在這里討論的第一件事是什么是延遲加載和急切加載:
急切加載是一種設計模式,其中數據初始化發生在現場延遲加載是一種設計模式,用於盡可能推遲 object 的初始化讓我們通過一些示例來看看這實際上是如何工作的:
UserLazy class:
@Entity
@Table(name = "USER")
public class UserLazy implements Serializable {
@Id
@GeneratedValue
@Column(name = "USER_ID")
private Long userId;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
private Set<OrderDetail> orderDetail = new HashSet();
// standard setters and getters
// also override equals and hashcode
}
OrderDetail class:
@Entity
@Table (name = "USER_ORDER")
public class OrderDetail implements Serializable {
@Id
@GeneratedValue
@Column(name="ORDER_ID")
private Long orderId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="USER_ID")
private UserLazy user;
// standard setters and getters
// also override equals and hashcode
}
一個用戶可以有多個 OrderDetails。 在急切加載策略中,如果我們加載用戶數據,它還將加載與其關聯的所有訂單並將其存儲在 memory 中。
但是,當啟用延遲加載時,如果我們拉起 UserLazy,OrderDetail 數據將不會被初始化並加載到 memory 中,直到對其進行顯式調用。
在下一節中,我們將了解如何在 Hibernate 中實現上述示例。
在這里找到文章: https://www.baeldung.com/hibernate-lazy-eager-loading
並閱讀此內容: https://www.imperva.com/learn/performance/lazy-loading/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.