我从Google上了解到的是:
Hibernate使用代理对象来实现延迟加载。当我们请求从数据库加载对象时,如果获取的对象具有对另一个具体对象的引用,则Hibernate返回代理而不是具体关联对象。
Hibernate使用字节码增强(由javassist提供)创建代理对象。Hibernate在运行时使用代码生成库创建我们实体类的子类,并用新创建的代理替换实际对象。
那么,代理对象究竟包含什么?
它是否包含一个骨架对象引用,只设置了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()方法,我可以期望什么?