Hibernate代理对象包含什么内容?

6 浏览
0 Comments

Hibernate代理对象包含什么内容?

从谷歌上我能找到的只有这些信息:

  • 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()方法,我可以期望得到什么?

0