1.迫切左外连接:Left join fetch
采用这个检索策略的话,list()方法返回的集合中存放的是实体对象的引用,而且每个实体对象关联的对象也都会被初始化,因此也会存放所有关联对象的实体对象。
例如:
有以下两个实体类:
- Employee
Department
Employee 中有一个 Department 类型的属性(存在多对一关系),如果我们获取 employee 表中所有的数据:FROM Employee,我们可以获取到所有的 Employee 实体对象,但是其关联的 Department 却未被初始化,如在 session 关闭后去使用其 Department 对象,会抛出懒加载异常。
如果需要在获取 Employee 对象时就初始化其关联的 Department 对象,需要使用迫切左外连接(或者直接在映射关系时加上 lazy=”false” 关闭懒加载):
String hql = "FROM Employee e LEFT JOIN FETCH e.department";
通过上面的 hql 使用 LEFT JOIN FETCH 在获取实体对象时,每个实体对象关联的对象也都会被初始化,因此也会存放所有关联对象的实体对象。