Все, что я мог собрать из Google, это то, что:
-
Hibernate использует прокси-объект для реализации ленивой загрузки. Когда мы запрашиваем загрузку объекта из базы данных, а извлеченный объект имеет ссылку на другой конкретный объект, Hibernate возвращает прокси вместо конкретного ассоциированного объекта.
-
Hibernate создает прокси-объект с использованием инструментария байт-кода (предоставляется javassist). Hibernate создает подкласс нашего класса сущности во время выполнения с использованием библиотеки генерации кода и заменяет фактический объект вновь созданным прокси.
Итак, что именно содержит объект Proxy?
Имеет ли он ссылочный объект объекта скелета только с установленным полем идентификатора? Другое поле будет установлено, когда мы вызываем метод get?
Объект Proxy содержит оператор 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 и имени, но прокси для адреса.
Правильно ли я?
Что я могу ожидать от добавления метода toString() в прокси-объекте?