【发布时间】:2014-10-10 00:38:18
【问题描述】:
我只能从 Google 收集到的信息是:
Hibernate 使用代理对象来实现延迟加载。 当我们请求从数据库中加载 Object 并且获取的 Object 引用了另一个具体对象时,Hibernate 返回一个代理而不是具体关联对象。
Hibernate 使用字节码检测(由 javassist 提供)创建代理对象。 Hibernate 在运行时使用代码生成库创建实体类的子类,并用新创建的代理替换实际对象。
那么,Proxy 对象究竟包含什么?
它是否包含只设置了 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() 方法有什么期望?
【问题讨论】:
标签: java hibernate orm proxy hibernate-mapping