考虑我有两个类如下:
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; //
}
如果我对 2 个用户进行急切提取,现在使用 hibernate 或任何 orm,这两个用户都属于同一部门(通过急切提取,我的意思是当我提取 Emplyee 时,我提取员工所属部门的部门详细信息) 1)首先是用户1(部门1) 2)然后对于用户2(dept2)
现在,由于每个员工 user1 和 user2 都被急切地获取,员工的部门详细信息将被获取 2 次,因此占用内存的 2 倍(对于部门详细信息)
是这种情况还是两个用户都引用了内存中的同一个部门对象? 内存中dept1上会不会有两个实例?一个给dept1,一个给dept 2?
最佳答案
如果 Employee 行 emp1 和 emp2 都指向数据库中的同一个 Department 行,您将在内存中拥有每一行的单一表示,即“Employee”类的 2 个实例,都指向“部门”类。 对于 session /上下文中的对象,无论它们是延迟加载还是急切加载,都是如此。
如果您使用单独的上下文,它将在内存中维护它自己的一组对象。
关于java - 了解如何在 hibernate 中的急切(非惰性)加载中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9962060/