在 Hibernate 中,急切(Eager)加载是指在加载父实体时,立即加载其关联的子实体。这可以通过在映射实体类中使用 FetchType.EAGER 来实现。
以下是一个示例,展示了如何在 Hibernate 中使用 JPA 实现急切查询加载所有子对象:
@Entity
public class ParentEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<ChildEntity> children;
}
@Entity
public class ChildEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private ParentEntity parent;
}
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
ParentEntity parent = session.get(ParentEntity.class, parentId);
// 由于设置了 FetchType.EAGER,这里的 children 列表将自动加载
List<ChildEntity> children = parent.getChildren();
transaction.commit();
session.close();
在这个示例中,我们通过调用 session.get() 方法获取了 ParentEntity 实例,由于设置了 FetchType.EAGER,Hibernate 将立即加载其关联的 ChildEntity 对象。
需要注意的是,急切加载可能会导致性能问题,因为它会立即加载所有关联的实体。在实际应用中,应根据具体需求权衡使用 FetchType.EAGER 还是 FetchType.LAZY。
领取专属 10元无门槛券
手把手带您无忧上云