JPA中的懒加载和急加载用于控制关联实体的数据加载策略。
懒加载:
- 指定关联关系为懒加载,相关数据不会在主实体加载时直接获取。
- 访问关联数据时,会首次加载相关实体的数据。
- 懒加载可以提高加载性能,避免加载不必要的数据。但可能会产生额外的SQL查询。
急加载:
- 指定关联关系为急加载,相关数据会在主实体加载时直接获取。
- 获取主实体数据时,会将所有关联实体的数据都加载进来。
- 急加载可以减少SQL查询次数,但会加载不必要的数据,影响性能。
配置方法:
- 映射文件中使用fetch属性。fetch=lazy为懒加载;fetch=eager为急加载。
<many-to-one name="department" fetch="lazy|eager" target-entity="Department"/>
- 使用@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;
}