理解会话的缓存
//开始一个事务
tx = session.beginTransaction();
//执行事务
客户c1 =新的客户(“zhangsan”,新的HashSet());
//客户对象被持久化,并加入到会议的缓存中
session.save(C1);
Long id = c1.getId();
// C1变量不在引用客户对象
c1 = null;
//从会话缓存中读取客户对象,使C2变量引用客户对象
Customer c2 =(Customer)session.load(Customer.class,id);
//提交事务
tx.commit();
//关闭会话,清空缓存
session.close();
//访问客户对象
的System.out.println(c2.getName());
1.session级别的缓存叫做一级缓存,SessionFactory的级别的缓存叫二级缓存。
休眠提供了两级缓存,第一级缓存是会话的缓存。由于会话对象的生命周期通常对应一个数据库事务或一个应用事务,因此它的缓存是事务范围的缓存。第一级缓存是必须的。
第二级缓存是一个可插拔的缓存插件,它由SessionFactory的负责管理。由于SessionFactory的对象的生命周期和应用程序的整个进程对应,因此第二级缓存是进程范围的缓存。这个缓存中存放的是对象的散装数据。第二级缓存是可选的,可以在每个类或者每个集合的粒度上配置二级缓存。
会议的缓存的作用
一,减少访问数据库的频率,应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快,因此可提高数据访问性能。
湾保证缓存中的对象与数据库中的相关记录保持同步。当缓存中持久化对象的状态发生了变化,会议并不会立即执行相关的SQL语句,这使得会议能够把几条相关的SQL语句合并为一条SQL语句,以减少访问数据库的次数,从而提高应用程序的性能。
清理缓存的时间点
会议会在下面的时间点清理缓存
一当应用程序调用org.hibernate.Transaction的提交()方法的时候,cmmit()方法先清理缓存,然后向数据库提交事务。
湾当应用程序显式调用会话的冲洗()方法的时候。
2.在hibernate应用程序中java对象的状态
临时状态(瞬态):刚刚用新的语句创建,还没有被持久化,不处于会议的缓存中,处于临时状态的Java的对象被称为临时对象。
持久化状态(的persisent):已经被持久化,加入到会议的缓存中,处于持久化状态的的Java对象被称为持久化对象。
游离状态(分离):已经被持久化,但不再处于会话的缓存中,游离对象。
对象的状态转换:
程序代码 | 客户对象的生命周期 | 客户对象的状态 |
tx = session.beginTransaction();
客户c1 =新的客户(“zhangsan”,新的HashSet());
|
Long id = c1.getId();
c1 = null;Customer c2 =(Customer)session.load(Customer.class,id);
tx.commit();处于生命周期中
处于持久化状态
理解会话的缓存
//开始一个事务
tx = session.beginTransaction();
//执行事务
客户c1 =新的客户(“zhangsan”,新的HashSet());
//客户对象被持久化,并加入到会议的缓存中
session.save(C1);
Long id = c1.getId();
// C1变量不在引用客户对象
c1 = null;
//从会话缓存中读取客户对象,使C2变量引用客户对象
Customer c2 =(Customer)session.load(Customer.class,id);
//提交事务
tx.commit();
//关闭会话,清空缓存
session.close();
//访问客户对象
的System.out.println(c2.getName());
会议的缓存的作用
一,减少访问数据库的频率,应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快,因此可提高数据访问性能。
湾保证缓存中的对象与数据库中的相关记录保持同步。当缓存中持久化对象的状态发生了变化,会议并不会立即执行相关的SQL语句,这使得会议能够把几条相关的SQL语句合并为一条SQL语句,以减少访问数据库的次数,从而提高应用程序的性能。
清理缓存的时间点
会议会在下面的时间点清理缓存
一当应用程序调用org.hibernate.Transaction的提交()方法的时候,cmmit()方法先清理缓存,然后向数据库提交事务。
湾当应用程序显式调用会话的冲洗()方法的时候。