理解如何在hibernate中的eager(非延迟)加载中获取对象

时间:2012-04-01 05:11:45

标签: java hibernate orm lazy-loading

考虑我有两个课程如下:

class Employee{

  private int empid;
  private string empName;
  //other attributes
  private DepartMent dept;  //note this

}


class Dept{
  private int deptId;
  private String deptName;
  List<Employee>  employees;  //

}

现在使用hibernate或任何orm如果我为2个用户做一个急切的提取,两个用户属于同一个部门(通过急切提取我的意思是当我获取Emplyee我获取部门员工所属部门的详细信息) 1)首先是用户1(dept1) 2)然后为用户2(dept2)

现在,当每个员工user1和user2被提取时,急切的员工详细信息将被提取2次,因此占用内存的2倍(对于部门细节)

是这种情况还是因此两个用户都在内存中引用相同的dept对象? 在内存中dept1上会有两个实例吗?一个用于dept1,一个用于dept 2?

1 个答案:

答案 0 :(得分:1)

如果Employee行emp1和emp2指向数据库中的相同Department行,您将拥有内存中每行的单个表示形式,即'Employee'类的2个实例,两个实例都指向单个实例'系'班。 对于会话/上下文中的对象,无论它们是懒惰还是急切加载,都是如此。

如果你使用一个单独的上下文,它将在内存中维护它自己的一组对象。