vin*_*han 43 java orm proxy hibernate hibernate-mapping
我可以从谷歌收集的是:
Hibernate使用代理对象来实现延迟加载.当我们请求从数据库加载Object,并且获取的Object具有对另一个具体对象的引用时,Hibernate返回代理而不是具体的关联对象.
Hibernate使用字节码检测(由javassist提供)创建代理对象.Hibernate在运行时使用代码生成库创建实体类的子类,并用新创建的代理替换实际对象.
那么,Proxy对象到底包含什么?
它是否包含仅设置了id字段的骨架对象引用对象?我们调用get方法时会设置其他字段吗?
Proxy对象是否包含JDBC语句以获取完全填充引用对象所需的所有数据.
还有什么我可能会失踪的吗?
我不是要求勺子喂食,但如果你能提供任何链接信息很棒.
对上述说明的任何更正也将受到欢迎.
例.
class Address {
String city;
String country;
}
class Person{
int id;
String name;
Address address;
}
Run Code Online (Sandbox Code Playgroud)
当我们尝试加载Person对象时,Hibernate会将Person类子类化为:
class ProxyPerson extends Person {
int id;
String name;
Address proxyCGLIBObject;
}
Run Code Online (Sandbox Code Playgroud)
并返回一个ProxyPerson对象.ProxyPerson的对象将具有id和name的值,但是Address的代理.
我对么?
在代理对象上添加toString()方法可以期待什么?
Vla*_*cea 44
正如我的书" 高性能Java持久性"中所解释的那样,Hibernate代理用于替换实际的实体POJO(Plain Old Java Object).
Proxy类在运行时生成,它扩展了原始实体类.
Hibernate使用实体的代理对象来允许延迟加载.
在访问代理服务器上的基本属性时,它只是将调用委托给原始实体.
每个List,Set,Map在实体类型是由取代的PersistentList,PersistentSet,PersistentMap.这些类负责拦截对未初始化集合的调用.
代理不会发出任何SQL语句.它只是触发一个InitializeCollectionEvent,它由关联的侦听器处理,它知道要发出哪个初始化查询(取决于配置的获取计划).
| 归档时间: |
|
| 查看次数: |
23318 次 |
| 最近记录: |