Что содержит прокси-объект Hibernate?
Описание проблемы
Я столкнулся с некоторыми вопросами по поводу работы Hibernate и его механизма ленивой загрузки данных. Вот что мне удалось узнать:
- Hibernate использует прокси-объект для реализации ленивой загрузки. Когда мы запрашиваем загрузку объекта из базы данных, и загруженный объект содержит ссылку на другой конкретный объект, Hibernate возвращает прокси вместо связанного конкретного объекта.
- Hibernate создает прокси-объект с помощью инструмента байт-кода (javassist). Он создает подкласс нашего класса сущности во время выполнения, используя библиотеку генерации кода, и заменяет фактический объект на только что созданный прокси.
Теперь у меня возникли несколько вопросов:
- Что именно содержит прокси-объект? Содержит ли он скелет объекта со ссылкой только на поле id? Остальные поля будут установлены, когда мы вызовем метод get?
- Содержит ли прокси-объект JDBC-запрос для получения всех данных, необходимых для полной инициализации ссылочного объекта?
- Есть ли что-то еще, что я мог упустить?
Я не прошу подробных объяснений, но если у вас есть ссылки на дополнительную информацию, я был бы признателен. Буду также рад любым поправкам к моему описанию.
Пример
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() в прокси-объект?
Как исправить ошибку Hibernate "объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом"
JPA JoinColumn против mappedBy: в чем разница?
В чем разница между JPA и Hibernate? [закрыт]
Как вывести строку запроса с параметрами при использовании Hibernate
Возможные значения конфигурации hbm2ddl.auto в Hibernate и их назначение