在hibernate中进行延迟初始化

Gop*_*h.R 2 hibernate lazy-initialization

我正在努力学习Hibernate,我来了hibernate lazy initialization.我对此有一些澄清lazy initialization.

首先,什么是所谓的Lazy初始化,它做什么?其次,我该什么时候去?接下来,我发现,在博客中说,使用它可以提高性能,我只需要知道如何.那么,有没有使用它的缺点?任何人都可以帮我理解这个lazy initialization吗?

Rin*_*g Ø 7

延迟提取(或初始化)与急切提取相反.延迟提取是hibernate中的默认设置,意味着当从数据库加载记录时,不会加载一对多关系子行.例如

@Entity
@Table(name = "COMPANY")
public class Company {
...
@OneToMany(fetch = FetchType.LAZY)
private Set<Employee> employees = new HashSet<Employee>();
Run Code Online (Sandbox Code Playgroud)

请求公司记录不会返回(设置)员工,这些员工必须在另一个查询中被请求.

好处

  • 性能.员工仅在需要(和请求)时加载.受益于CPU,内存,带宽......(Java端和SQL服务器端).

缺点

  • 当还需要Employees时,必须执行单独的查询.

请注意,Employees上的查询必须在同一会话期间执行(或者着名的LazyInitializationException将不受欢迎).

此页面包含有趣的信息.