Hibernate 中延迟加载和立即加载的区别
延迟加载和立即加载是 Hibernate 和 Eclipse Link 等 ORM 框架中的两种数据加载策略。当一个实体类引用其他实体(例如,员工和电话)时,我们会使用这些数据加载策略。
延迟加载 - 只有在显式调用 getter 方法或 size 方法时才会加载关联数据。
- 当使用一对多集合时,使用延迟加载。
- 当确定不使用相关实体时,使用延迟加载。
立即加载 - 在加载父实体时,同时加载数据。
- 当关系数量不多时,使用立即加载。因此,立即加载是减少服务器额外查询的好方法。
- 当确定始终需要使用与主实体相关的实体时,使用立即加载。
序号 | 关键点 | 延迟加载 | 立即加载 |
---|---|---|---|
1 | 获取策略 | 在延迟加载中,只有在显式调用 getter 方法或 size 方法时才会加载关联数据。 | 在立即加载中,在加载父实体时同时加载数据。 |
2 | ORM 层中的默认策略 | 多对多和一对多关联默认使用延迟加载策略。 | 多对一和一对一关联默认使用延迟加载策略。 |
3 | 加载配置 | 可以使用注解参数启用它fetch = FetchType.LAZY | 可以使用注解参数启用它fetch = FetchType.EAGER |
4 | 性能 | 初始加载时间比立即加载小得多 | 加载太多不必要的数据可能会影响性能 |
广告