当load被调用时,Hibernate会检查对象是否已经包含在会话中。如果为真,则返回该对象,否则将创建代理。
Session用于与数据库交互,当在load方法中传递对象时,它是如何包含对象的。那么在使用代理的地方又如何呢?
发布于 2011-12-27 21:21:35
代理只是一个包裹在真实对象周围的封套。当您调用session.load(Person.class, 3)时,Hibernate将检查ID为3的人员是否已经在会话缓存中。如果不是,它将创建一个代理,将其存储在会话缓存中,并返回它。代理是一个工作方式如下的类:
public class PersonProxy extends Person {
private int id;
private boolean initialized = false;
public String getName() {
if (!initialized) {
// read state of the entity from database;
initialized = true;
}
return this.name;
}
...
}https://stackoverflow.com/questions/8642821
复制相似问题