понимание того, как объекты выбираются при активной (не ленивой) загрузке в спящем режиме - PullRequest
2 голосов
/ 01 апреля 2012

Считайте, что у меня есть два класса следующим образом:

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 Ответ

1 голос
/ 02 апреля 2012

Если обе строки Employee, emp1 и emp2, указывают на одну и ту же строку Department в базе данных, у вас будет одно представление каждой строки в памяти, то есть 2 экземпляра класса Employee, оба указывают на один экземпляр Класс «Отдел». Это верно для объектов в сеансе / контексте независимо от того, загружены они или нет.

Если вы используете отдельный контекст, он сохранит свой собственный набор объектов в памяти.

...