[英]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.