考虑我有两个课程如下:
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?
答案 0 :(得分:1)
如果Employee行emp1和emp2指向数据库中的相同Department行,您将拥有内存中每行的单个表示形式,即'Employee'类的2个实例,两个实例都指向单个实例'系'班。 对于会话/上下文中的对象,无论它们是懒惰还是急切加载,都是如此。
如果你使用一个单独的上下文,它将在内存中维护它自己的一组对象。