当调用load时,Hibernate会检查对象是否已经包含在会话中。如果这是真的,则返回对象,否则创建代理。无法理解休眠中的会话
会话用于与数据库进行交互,它在加载方法中传递对象时如何包含对象。那么代理在什么地方使用。
当调用load时,Hibernate会检查对象是否已经包含在会话中。如果这是真的,则返回对象,否则创建代理。无法理解休眠中的会话
会话用于与数据库进行交互,它在加载方法中传递对象时如何包含对象。那么代理在什么地方使用。
代理只是围绕真实物体的信封。当您致电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;
}
...
}
当会话关闭时,第一级缓存总数是否被清除? – 2011-12-30 10:28:24
是的。第一级缓存由会话维护。如果关闭会话,则会清除其第一级缓存。 – 2011-12-30 10:32:48
如果另一个线程打开一个会话,那么这个代理是否可用?如果不是性能问题在哪里?如果ID为3的人没有关闭,它是否可以在整个应用程序中使用? – 2011-12-30 12:06:12
由于性能原因,会话也是第一级缓存(在内存中)。 CGLIB代理被创建以促进实体/集合的延迟加载。 – aishwarya 2011-12-27 11:21:49