JPA中的懒加载和急加载是什么?如何配置?代码举例讲解

JPA中的懒加载和急加载用于控制关联实体的数据加载策略。

懒加载:

  1. 指定关联关系为懒加载,相关数据不会在主实体加载时直接获取。
  2. 访问关联数据时,会首次加载相关实体的数据。
  3. 懒加载可以提高加载性能,避免加载不必要的数据。但可能会产生额外的SQL查询。

急加载:

  1. 指定关联关系为急加载,相关数据会在主实体加载时直接获取。
  2. 获取主实体数据时,会将所有关联实体的数据都加载进来。
  3. 急加载可以减少SQL查询次数,但会加载不必要的数据,影响性能。

配置方法:

  1. 映射文件中使用fetch属性。fetch=lazy为懒加载;fetch=eager为急加载。
<many-to-one name="department" fetch="lazy|eager" target-entity="Department"/>  
  1. 使用@ManyToOne等注解及fetch属性。FetchType.LAZY为懒加载;FetchType.EAGER为急加载。
@ManyToOne(fetch = FetchType.LAZY)
public Department getDepartment() { ... }  

代码示例:

// 懒加载
@Entity
public class User {
    @Id
    private int id;  

    @ManyToOne(fetch = FetchType.LAZY)
    private Department department;
}  

// 急加载   
@Entity 
public class User {
    @Id
    private int id;

    @ManyToOne(fetch = FetchType.EAGER)
    private Department department;  
}