0

Что содержит прокси-объект Hibernate?

10

Описание проблемы

Я столкнулся с некоторыми вопросами по поводу работы Hibernate и его механизма ленивой загрузки данных. Вот что мне удалось узнать:

  • Hibernate использует прокси-объект для реализации ленивой загрузки. Когда мы запрашиваем загрузку объекта из базы данных, и загруженный объект содержит ссылку на другой конкретный объект, Hibernate возвращает прокси вместо связанного конкретного объекта.
  • Hibernate создает прокси-объект с помощью инструмента байт-кода (javassist). Он создает подкласс нашего класса сущности во время выполнения, используя библиотеку генерации кода, и заменяет фактический объект на только что созданный прокси.

Теперь у меня возникли несколько вопросов:

  1. Что именно содержит прокси-объект? Содержит ли он скелет объекта со ссылкой только на поле id? Остальные поля будут установлены, когда мы вызовем метод get?
  2. Содержит ли прокси-объект JDBC-запрос для получения всех данных, необходимых для полной инициализации ссылочного объекта?
  3. Есть ли что-то еще, что я мог упустить?

Я не прошу подробных объяснений, но если у вас есть ссылки на дополнительную информацию, я был бы признателен. Буду также рад любым поправкам к моему описанию.

Пример

class Address {
   String city;
   String country;
}

class Person {
   int id;
   String name;
   Address address;
}

Когда мы пытаемся загрузить объект Person, Hibernate создаст подкласс класса Person, как показано ниже:

class ProxyPerson extends Person {
       int id;
       String name;
       Address proxyCGLIBObject;
}

И вернет объект ProxyPerson. У объекта ProxyPerson будут значения для id и name, но прокси для Address.

Так ли это?

Что я могу ожидать от добавления метода toString() в прокси-объект?

0 ответ(ов)

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь